• 牛客网:吃货 (二分模拟)


    链接:https://ac.nowcoder.com/acm/problem/15664
    来源:牛客网
     

    题目描述

    作为一个标准的吃货,mostshy又打算去联建商业街觅食了。
    混迹于商业街已久,mostshy已经知道了商业街的所有美食与其价格,而且他给每种美食都赋予了一个美味度,美味度越高表示他越喜爱这种美食。
    mostshy想知道,假如带t元去商业街,只能吃一种食物,能够品味到的美食的美味度最高是多少?

    输入描述:

    第一行是一个整数T(1 ≤ T ≤ 10),表示样例的个数。
    以后每个样例第一行是两个整数n,m(1 ≤ n,m ≤ 30000),表示美食的种类数与查询的次数。
    接下来n行,每行两个整数分别表示第i种美食的价格与美味度di,ci (1 ≤ di,ci ≤ 109)。
    接下来m行,每行一个整数表示mostshy带t(1 ≤ t ≤ 109)元去商业街觅食。
    

    输出描述:

    每个查询输出一行,一个整数,表示带t元去商业街能够品味到美食的最高美味度是多少,如果不存在这样的美食,输出0。

    示例1

    输入

    复制

    1
    3 3
    1 100
    10 1000
    1000000000 1001
    9
    10
    1000000000

    输出

    复制

    100
    1000
    1001

    说明

    大量的输入输出,请使用C风格的输入输出。

    按价格从小到大排序,如果价格相同,按美味度从大到小排序。

    更新每种价格可以获得的美味度。

    如果一种物品价格更低,美味度却高:将其他价格比该物品高,美味度比该物品低的美味度更新。

    二分找出符合条件的美味度最大的值。

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    #define N 30020
    struct date{
        int d;         //价格 
        int c;         //美味度 
    }a[N];
    int cmp(struct date a,struct date b)
    {
    	if(a.d != b.d)
    		return a.d < b.d;
    	else
    		return a.c > b.c;
    }
    int main()
    {
        int T,m,n,i,j,t,ans,l,r,mid,book;
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d%d", &n, &m);
            for(i=0; i<n; i++)
                scanf("%d%d", &a[i].d, &a[i].c);
            sort(a, a+n, cmp); 
            book=0;
            for(i=0; i<n; i++)      //价钱高的可以获得前面最高的美味度 
            {
            	if(a[i].c < book)
    				a[i].c = book;
    			else
    				book = a[i].c;	
    		} 
            while(m--)
            {
            	ans=0;
    	       	scanf("%d", &t);
    	        l=0;
    	        r=n-1;
    	        while(l<=r)
    	        {
    	        	mid=(l+r)/2;
    	        	if(t >= a[mid].d)
    	        	{
    	        		if(ans < a[mid].c)
    	        			ans = a[mid].c;
    	        		l = mid+1;
    				}
    	        	else
    	        		r = mid-1;
    			}
    			printf("%d
    ",ans);
    		} 
        }
        return 0;
    }
  • 相关阅读:
    ajax工作原理
    ajax 和xmlHttpRequest区别
    ajax 基本语法
    javascript 中XMLHttpRequest 实现前台向后台的交互
    Javascript 中ajax实现前台向后台交互
    javascript 中函数eval()
    两道有趣的面试题
    linux 中的快捷键
    linux awk命令详解
    linux sed命令详解
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/11852800.html
Copyright © 2020-2023  润新知