Skip to content

区间线性基(单点修改,区间查询)(Onlog⁡nlog⁡2VOn\log n\log^2V) ​

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;
}