智商问题

题目链接

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 inline ll read()
 5 {
 6     int x=0,f=1;char ch=getchar();
 7     while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
 8     while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
 9     return x*f;
10 }
11 
12 /********************************************************************/
13 
14 const int maxn = 1e6+5;
15 int a[maxn];
16 int last[maxn];
17 int n, num;
18 
19 int ask(int x){
20     for(int i = 1;i <= num+1;i++){
21         if(x <= last[i] && x > last[i-1]){
22             int b = (i-1)*num;
23             for(int j = 1;j <= num;j++){
24                 if(a[b+j] >= x){
25                     return b+j;
26                 }
27             }
28         }
29     }
30 }
31 
32 int main(){
33     n = read();
34     for(int i = 1;i <= n;i++)
35         a[i] = read();
36     sort(a+1, a+1+n);
37     num = (int)sqrt(n);
38     for(int i = 1;i <= num;i++)
39         last[i] = a[i*num];
40     last[num+1] = a[n];
41     int x;
42     while(scanf("%d", &x) != EOF){
43         if(x < a[1])
44             printf("1\n");
45         else if(x > a[n])
46             printf("%d\n", n+1);
47         else
48             printf("%d\n", ask(x));
49     }
50 
51     return 0;
52 }

 

posted @ 2018-09-07 20:47  ouyang_wsgwz  阅读(115)  评论(0编辑  收藏  举报