zoukankan      html  css  js  c++  java
  • CodeForces

    Interesting drink

    Problem

    Vasiliy likes to rest after a hard work, so you may often meet him in some bar nearby. As all programmers do, he loves the famous drink "Beecola", which can be bought in n different shops in the city. It's known that the price of one bottle in the shop i is equal to xi coins.

    Vasiliy plans to buy his favorite drink for q consecutive days. He knows, that on the i-th day he will be able to spent mi coins. Now, for each of the days he want to know in how many different shops he can buy a bottle of "Beecola".

    Input

    The first line of the input contains a single integer n (1 ≤ n ≤ 100 000) — the number of shops in the city that sell Vasiliy's favourite drink.

    The second line contains n integers xi (1 ≤ xi ≤ 100 000) — prices of the bottles of the drink in the i-th shop.

    The third line contains a single integer q (1 ≤ q ≤ 100 000) — the number of days Vasiliy plans to buy the drink.

    Then follow q lines each containing one integer mi (1 ≤ mi ≤ 109) — the number of coins Vasiliy can spent on the i-th day.

    Output

    Print q integers. The i-th of them should be equal to the number of shops where Vasiliy will be able to buy a bottle of the drink on the i-th day.

    Example
    Input
    5
    3 10 8 6 11
    4
    1
    10
    3
    11
    Output
    0
    4
    1
    5
    Note

    On the first day, Vasiliy won't be able to buy a drink in any of the shops.

    On the second day, Vasiliy can buy a drink in the shops 1, 2, 3 and 4.

    On the third day, Vasiliy can buy a drink only in the shop number 1.

    Finally, on the last day Vasiliy can buy a drink in any shop.

    给出n个数,再输入若干个M,每输入一次M,求n个数里有多少个数小于M。
    由于n是1e5的数量级,不可O(n^2)暴力,用二分即可。

     1 #include<stdio.h>  
     2     #include<string.h>  
     3     #include<algorithm>  
     4     using namespace std;  
     5     int a[100000+10];  
     6     int main()  
     7     {  
     8         int n,i,j,k,num,m;  
     9         while(scanf("%d",&n)!=EOF)  
    10         {  
    11             for(i=1;i<=n;i++)  
    12             scanf("%d",&a[i]);  
    13             sort(a+1,a+n+1);  
    14             scanf("%d",&m);  
    15             while(m--)  
    16             {  
    17                 scanf("%d",&num);  
    18                 if(num<a[1])  
    19                 printf("0
    ");  
    20                 else if(num>=a[n])  
    21                 printf("%d
    ",n);  
    22                 else  
    23                 {  
    24                     int left=1;  
    25                     int right=n;  
    26                     int mid;  
    27                     int ans;  
    28                     while(left<=right)  
    29                     {  
    30                         mid=(left+right)/2;  
    31                         if(a[mid]<=num)  
    32                         {  
    33                             ans=mid;  
    34                             left=mid+1;  
    35                         }  
    36                         else  
    37                         {  
    38                             right=mid-1;  
    39                         }  
    40                     }  
    41                     printf("%d
    ",ans);  
    42                 }  
    43             }  
    44         }  
    45         return 0;  
    46     }  
  • 相关阅读:
    VirtualBox安装
    记一次修改fstab挂载参数
    Debian其实有提供附带了各种桌面的安装镜像
    记一次使用unzip命令
    记一次给iPhone 6越狱
    浅谈.Net中内置的一种特殊的引用类型 -- String类型
    .Net中的静态类和非静态类、静态成员和非静态成员
    .Net子窗体给父窗体传值的几种方法
    int、float、double In .Net之相互转换
    车厢重组
  • 原文地址:https://www.cnblogs.com/YingZhixin/p/6498174.html
Copyright © 2011-2022 走看看