51nod 1406 与查询

有n个整数。输出他之中和x相与之后结果为x的有多少个。x从0到1,000,000

1<=n<=1,000,000

0<=a[i]<=1,000,000

https://blog.csdn.net/jpwang8/article/details/78704007

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N = 1e6 + 10;
 5 
 6 int n, f[N];
 7 
 8 void put(int x) {
 9     if(x) put(x / 10), putchar(x % 10 + '0');
10 }
11 
12 int main() {
13     int mx = 0, bt = 0;
14     scanf("%d", &n);
15     for(int i = 1, x ; i <= n ; ++ i) { scanf("%d", &x), ++ f[x]; mx = max(mx, x); }
16     for(int t = mx ; t ; t >>= 1) ++ bt;
17     for(int j = 0 ; j <= bt ; ++ j)
18         for(int i = 1 ; i <= mx ; ++ i)
19             if(i & (1 << j))
20                 f[i - (1 << j)] += f[i];
21     for(int i = 0 ; i <= int(1e6) ; ++ i)
22         if(f[i] == 0) puts("0");
23         else put(f[i]), puts("");
24 }
51nod 1406 与查询
posted @ 2018-08-10 20:16  KingSann  阅读(123)  评论(0编辑  收藏  举报