题解 CF165E 【Compatible Numbers】
这题是一道高位前缀和的模板题
题目大意:对于每一个
分析:
对于每一对
实现:
预处理出数组
代码:
#include<bits/stdc++.h>
using namespace std;
int n, a[1000005], f[1<<22];
int main() {
cin>>n;
for(int i=1;i<=n;i++) {
scanf("%d", &a[i]);
f[a[i]]=a[i];
}
for(int i=0;i<=21;i++) {
for(int j=0;j<(1<<22);j++) {
if((j&(1<<i))&&f[j^(1<<i)]) f[j]=f[j^(1<<i)];
}
}//高维前缀和
for(int i=1;i<=n;i++) {
int b=((1<<22)-1)^a[i];//取反操作
printf("%d ", f[b]?f[b]:-1);
}
}