P4462 [CQOI2018]异或序列


思路

把序列求前缀异或和一下
问题转变成了[l,r]中有多少个数对(x,y)的异或和为k
然后莫队就好了

代码

    #include 
    #include 
    #include 
    #include 
    using namespace std;
    int n,m,k,a[100100],belong[100100],sz,num,L,R,ans[100100],barrel[2001000],sum=0;
    struct Query{
        int l,r,id;
        bool operator < (const Query &b){
            return (belong[l]==belong[b.l])?rQ[i].l)
                moveL(-1);
            while(RQ[i].r)
                moveR(-1);
            ans[Q[i].id]=sum;
        }
        for(int i=1;i<=m;i++)
            printf("%d\n",ans[i]);
        return 0;
    }

相关