线段树维护线性基并——17西安icpc a

Posted zsben991126

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线段树维护线性基并——17西安icpc a相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;
#define N 10005

int a[N],n,k,q;

struct LB
    int b[35];
    LB()memset(b,0,sizeof b);
    int check(int x)
        for(int i=29;i>=0;i--)if(x>>i & 1)
            if(!b[i])return 0;
            x^=b[i];
        
        return 1;
    
    void insert(int x)
        for(int i=29;i>=0;i--)if(x>>i & 1)
            if(!b[i])b[i]=x;return;
            x^=b[i];
        
    
    int query_max()
        int res=0;
        for(int i=29;i>=0;i--)
            res=max(res,res^b[i]);
        return res;
    
;

#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
LB seg[N<<2];
LB merge(LB A,LB B)
    LB res;
    for(int i=29;i>=0;i--)
        res.b[i]=A.b[i];
    for(int i=29;i>=0;i--)
        if(B.b[i])
            res.insert(B.b[i]);
    return res;

void build(int l,int r,int rt)
    if(l==r)
        seg[rt].insert(a[l]);
        return;
    
    int m=l+r>>1;
    build(lson);build(rson);
    seg[rt]=merge(seg[rt<<1],seg[rt<<1|1]); 

LB query(int L,int R,int l,int r,int rt)
    if(L<=l && R>=r)return seg[rt];
    int m=l+r>>1;
    LB res;
    if(L<=m)res=merge(res,query(L,R,lson));
    if(R>m)res=merge(res,query(L,R,rson));
    return res;


void init()


int main()
    int t;cin>>t;while(t--)
        cin>>n>>q>>k;
        for(int i=1;i<=n;i++)
            /*k的存在会对求线性基最大值时的主元产生影响,所以预处理,a[i]只保留k没有的位*/ 
            scanf("%d",&a[i]);
            for(int j=0;j<30;j++)
                if((k>>j & 1) && (a[i]>>j & 1))
                    a[i]^=(1<<j);
        
        
        build(1,n,1); 
        while(q--)
            int L,R;scanf("%d%d",&L,&R);
            LB res=query(L,R,1,n,1);
            cout<<(res.query_max()|k)<<\n;
        
    
 

 

以上是关于线段树维护线性基并——17西安icpc a的主要内容,如果未能解决你的问题,请参考以下文章

2017 ICPC西安区域赛 A - XOR (线段树并线性基)

2019ICPC西安邀请赛 E. Tree 树剖 + 线段树

2017西安邀请赛:AXOR(线段树+线性基)

倍增/线段树维护树的直径 hdu5993/2016icpc青岛L

[计蒜客] ACM-ICPC 2018 南京赛区网络预赛 | 部分题解 | 线段树 + 线性筛 + 最短路

2019-2020 ICPC, Asia Jakarta Regional Contest K题 Addition Robot线段树维护矩阵积