3166: Best Messenger Tool――NKQQ

描述

Mr. Wysuperfly uses a messenger tool called NKQQ to communicate with his friends on the net. The NKQQ accumulates 1 point score every hour automatically. When the score reach certain level, there will be a level-up. The relationship between the score and the level is listed as below:

 

Level 1 0 - 100
Level 2 101 - 500
Level 3 501 - 2000
Level 4 2001 - 10000
Level 5 10001 - 50000
Level 6 50001 - 200000
Level 7 200001 - infinity

 

Mr. Wysuperfly finds that other ACM teammates also use NKQQ everyday like him. He wants to know that after several hours, how many teammates reach a certain level. Can you help him?

输入

The first line is an integer N (N<=10^5) which represents the amount of the teammates to be considered. The second line includes N numbers which represent the scores of the teammates. The third line is a positive integer Q (Q<=10^5) which represents how many questions in the input data. In the following Q lines, each line which includes two integers D (0<=D<=10^9) and L (1<=L<=7) stands for a question: ‘After D hours, how many teammates will reach level L?

输出

For every question, output one line to show the answer to the question (one nonnegative integer).

样例输入

样例输出

题目意思:一小时加一分 问几小时后 在某一等级里分数有多少个。

解题思路: 二分查找。 查找某一区间里面个数

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=1e5+5;
 4 int t,D,L,L1,L2;
 5 vector<int> vec;
 6 int main()
 7 {
 8     ios::sync_with_stdio(false);
 9     cin>>t;
10     for(int i=1,d;i<=t;i++) cin>>d,vec.push_back(d);
11     sort(vec.begin(),vec.end());
12     cin>>t;
13     while(t--){
14         cin>>D>>L;
15         if(L==1) L1=0,L2=100;
16         if(L==2) L1=101,L2=500;
17         if(L==3) L1=501,L2=2000;
18         if(L==4) L1=2001,L2=10000;
19         if(L==5) L1=10001,L2=50000;
20         if(L==6) L1=50001,L2=200000;
21         if(L==7) L1=200001,L2=1e10+5;
22         L1=L1-D,L2=L2-D;
23         int w1=lower_bound(vec.begin(),vec.end(),L1)-vec.begin();
24         int w2=upper_bound(vec.begin(),vec.end(),L2)-vec.begin();
25         cout << w2-w1 << endl;
26     }
27 }
View Code

 

原文地址:https://www.cnblogs.com/qq-1585047819/p/10914552.html