鏈結
異或的逆運算就是其本身
即a xor b = c 即 c xor a = b
對於本題,
記錄一下1-i的異或和為sum[i]
顯然l~r的異或和就為sum[l-1] xor sum[r]
若為異或和為k即滿足sum[r] xor k = sum[l-1]
開個桶,莫隊即可
注意一下莫隊處理時刪除乙個數時的順序就好了
#includeusingnamespace
std;
#define ll long longinline ll read()
while(ch<'
0'||ch>'9'
);
dowhile(ch>='
0'&&ch<='9'
);
return f*x;
}const
int maxn = 100000 + 10
;struct
query
q[maxn];
intn,m,k,sz;
inta[maxn],sum[maxn];
intbol[maxn];
intans[maxn];
intcnt[maxn];
inline
bool
cmp(query a1,query a2)
intmain()
sort(q+1,q+m+1
,cmp);
int l = 1,r = 0
;
int res = 0
;
for(int i=1;i<=m;i++)
for(int i=1;i<=m;i++)
}
P4462 CQOI2018 異或序列
原題鏈結 給你乙個長度為 n 的序列和 m 次詢問,求每次詢問中有多少個子區間異或和為 k 這是一道區間查詢的題目,所用的演算法是資料結構,我這裡用的是莫隊演算法 回顧一下異或的神奇性質 1.a b c 則 a c b b c a 2.a a 0 a 0 a 則 a a a a 有了上面的性質,我們...
P4462 CQOI2018 異或序列
求出異或字首和sum,對於 a l a l 1 a r 就變成了sum r sum l 1 所以最終我們要求的就是在區間 l,r 中有多少子區間 l,r 是滿足 sum r sum l 1 k 的 sum r sum l 1 k sum l 1 sum r k sum r k sum l 1 變換以...
P4462 CQOI2018 異或序列 莫隊
區間異或 sum l,r pr e l 1 xo rpre r sum l,r pre l 1 xor pre r sum l,r p re l 1 x orpr e r a xo rb k axo rk b a xor b k implies a xor k b axorb k ax ork b ...