线性基 求区间异或和最大值
http://acm.hdu.edu.cn/showproblem.php?pid=6579
对于ii我们记录[1,i][1,i]每个基底最靠近ii的位置和这个位置的值,然后查询时看rr这个位置记录的每个基底的位置是否大于等于ll,如果大于等于那么[l,r][l,r]内一定有一个位置可以贡献这个基底,然后比较答案大小即可。
本题和https://codeforces.com/contest/1100/problem/F一样的写法只是多了个操作而已。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int d[32],pos[32], base[500005][32], las[500005][32];
int a[500005];
void add(int x,int pp){
for(int i=30;i>=0;i--){
if( x& ((1ll)<<i )){
if(pos[i] < pp) {
swap(d[i], x);
swap(pos[i], pp);
}
if(d[i]){
x=x^d[i];
}
else{
d[i]=x;
pos[i]=pp;
break;
}
}
}
}
int main(){
int t;
cin >> t;
int