题目
在讨论子句段的 XOR 时,通常可以考虑前缀 XOR。那么,如果 是数组或前缀 XOR,那么子段 XOR 就是 。也就是说,要使 为零, 必须等于 ,而 的所有其他值都应该是不同的。最简单的构造就是 ,但 除外。这样,数组 就可以重构为 。
AC代码如下
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
void solve(){
int n,l,r;
cin>>n>>l>>r;
vector<int>b(n+1);
for(int i=0;i<=n;i++){
b[i]=i;
}
b[r]=b[l-1];
for(int i=1;i<=n;i++){
cout<<(b[i]^b[i-1])<<(i==n?"":" ");
}
cout<<endl;
}
signed main(){
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
int t=1;
cin>>t;
while(t--){
solve();
}
return 0;
}