天天看點

51Nod 1406 與查詢

#include<stdio.h>
using namespace std;

const int maxn=1000000+100;

inline int read(){
    
    int x=0;
    char ch=getchar();
    for(;ch>'9' || ch<'0';ch=getchar());
    for(;ch<='9' && ch>='0';x=x*10+ch-'0',ch=getchar());
    return x;
}

inline void print(int x){
    
    if(x>9) print(x/10);
    putchar(x%10+'0'); 
}

int ans[maxn];

int main(){
    
    int n;
    n=read();
    for(int i=1,val;i<=n;i++) val=read(),ans[val]++;
    for(int i=20;i>=0;i--){
        
        for(int j=0;j<=1000000;j++) if((1<<i)&j) ans[j^(1<<i)]+=ans[j];
    }
    for(int i=0;i<=1000000;i++) print(ans[i]),putchar('\n');
}