zoukankan      html  css  js  c++  java
  • 二分

    Description

    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.

    Sample Input

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

    Hint

    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 123 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.

    二分水题

    给出一个序列的长度和元素  然后有m个数  分别求出这个序列中小于等于这些数的元素个数  

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<algorithm>
    using namespace std;
    int a[100001];
    int main()
    {
         int n;
         scanf("%d",&n);
         for(int i=0;i<n;i++)
         {
         	scanf("%d",&a[i]);
    	 }
    	 sort(a,a+n);
    	 int m,k;
    	 scanf("%d",&m);
    	 while(m--)
    	 {
           scanf("%d",&k);
           int r=n-1,l=0;
           int ans=0;
           while(l<=r)
           {
           	int mid=(l+r)/2;
    		   if(a[mid]>k)
    		   {
    		   	r=mid-1;
    		   }
    		   else
    		   {
    		   	  l=mid+1  ;
    		   }
    	   }
    	   printf("%d
    ",l);
    	 }
    	return 0;
    }
    


  • 相关阅读:
    openssl签署和自签署证书的多种实现方式
    OpenSSL主配置文件openssl.cnf
    openssl x509(签署和自签署)
    openssl rsautl和openssl pkeyutl(文件的非对称加密)
    openssl dgst(生成和验证数字签名)
    openssl passwd
    openssl speed和openssl rand
    openssl rsa/pkey
    openssl genrsa
    OpenSSL命令系列
  • 原文地址:https://www.cnblogs.com/kingjordan/p/12027046.html
Copyright © 2011-2022 走看看