区间线性基(单点修改,区间查询)()
cpp
struct Node{
int l,r;
LinearBasis lb;
} t[N<<2];
void build(int p,int l,int r){
t[p]={l,r};
if(l==r)return;
int mid=l+r>>1;
build(p<<1,l,mid);
build(p<<1|1,mid+1,r);
}
void modify(int p,int x,int val){
if(t[p].l==t[p].r){
t[p].lb.init();
t[p].lb.insert(val);
return;
}
int mid=t[p].l+t[p].r>>1;
if(x<=mid)modify(p<<1,x,val);
else modify(p<<1|1,x,val);
t[p].lb=t[p<<1].lb|t[p<<1|1].lb;
}
LinearBasis query(int p,int l,int r){
if(l<=t[p].l&&r>=t[p].r)return t[p].lb;
int mid=t[p].l+t[p].r>>1;
LinearBasis res;
if(l<=mid)res=res|query(p<<1,l,r);
if(r>mid)res=res|query(p<<1|1,l,r);
return res;
}