传送门
题目:
Example
input
5
4
1 3 7 15
4
1 2 4 8
5
1 2 3 4 5
4
11 13 15 1
1
0
output
0 0 0 0
0 1 3 7
0 1 0 3 2
0 2 0 14
0
大致翻译:
一个长度为n的序列a, 如果满足 a[i] & a[i + 1] == a[i], i ∈ [1, n) , 则称该序列为增长的
两个长度均为n的序列a, b. 现构造出长度为n的序列c, 使得 c[i] = a[i] ⊕ b[i], i ∈ [1, n], 若c序列是增长的, 则称序列a和b是同增的
现给出序列a, 让你构造出一个字典序最小的序列b, 使得a和b是同增的
思路:
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+10;
int a[N];
int main(){
ios::sync_with_stdio(false);
int t,n;cin>>t;
while(t--){
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cout<<'0'<<' ';
int s=0;
for(int i=2;i<=n;i++){
s=(a[i-1]^a[i])&a[i-1];
cout<<s<<' ';
a[i]=s|a[i];
}
cout<<endl;
}
return 0;
}