[关闭]
@xunuo 2017-02-19T10:03:41.000000Z 字数 1849 阅读 2829

Codeforces 706 B Interesting drink


time limit per test2 seconds memory limit per test256 megabytes

二分


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.

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;表示有n个数;
    第二行输入这n个数;
    第三行输入一个数m;表示有多少个查询
    接下来m行输入要查的这些数;
其实题意很简单,主要是数据太大要超时;所以这个题要利用二分查询;

完整代码:

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. #include<algorithm>
  5. using namespace std;
  6. int a[100010];
  7. int main()
  8. {
  9. int n;
  10. while(scanf("%d",&n)!=EOF)
  11. {
  12. for(int i=1;i<=n;i++)
  13. scanf("%d",&a[i]);
  14. sort(a+1,a+n+1);
  15. int m;
  16. scanf("%d",&m);
  17. int x;
  18. while(m--)
  19. {
  20. int ans;
  21. scanf("%d",&x);
  22. if(x<a[1])
  23. ans=0;
  24. else if(x>=a[n])
  25. ans=n;
  26. else
  27. {
  28. int l=1;
  29. int r=n;
  30. int mid;
  31. while(l<=r)
  32. {
  33. mid=(l+r)/2;
  34. if(a[mid]<=x)
  35. {
  36. ans=mid;
  37. l=mid+1;
  38. }
  39. else
  40. r=mid-1;
  41. }
  42. }
  43. printf("%d\n",ans);
  44. }
  45. }
  46. return 0;
  47. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注