題目描述
已知乙個長度為n的整數數列a1,a2,…,an,給定查詢引數l、r,問在al,al+1,…,ar區間內,有多少子串行滿足異或和等於k。也就是說,對於所有的x,y(l≤x≤y≤r),滿足ax⊕ax+1⊕⋯⊕ay=k的x,y有多少組。
輸入輸入第一行為3個整數n,m,k。第二行為空格分開的n個整數,即a1,a2,…,an。接下來m行,每行兩個整數lj,rj,代表一次查詢。
輸出輸出共m行,對應每個查詢的計算結果。
樣例輸入
4 5 1樣例輸出1 2 3 1
1 41 3
2 32 4
4 4
421提示21
對於30%的資料,1≤n,m≤1000。
對於100%的資料,1≤n,m≤105,0≤k,ai≤105,1≤lj≤rj≤n。
使用莫隊演算法。
這裡只講一下細節和實現問題。
初始化cnt[0] = 1:如果只給你乙個資料ai = 1,和k = 1,怎麼計算?就是1^0 = 1,就是說使用了數字0來參與異或,所以初始化cnt[0] = 1.
同時,因為多使用了數字0,導致使用莫隊模板時左端點 l-1
還有就是col [i] 中儲存的是前i項異或的值
#includeusingnamespace
std;
const
int m = 1e5 + 5
;struct
node
q[m];
intcol[m],cnt[m],ans[m],pos[m],block,tot;
intn,m,k;
bool
cmp(node a, node b)
void add(int
x)void sub(int
x)int
main()
for(int i = 1; i <= m; i++)
sort(q+1,q+1+m,cmp);
int l = 1, r = 0
; cnt[
0] = 1
;
for(int i = 1; i <= m; i++)
for(int i = 1; i <= m; i++)
cout
<'\n'
;
return0;
}
upc 6759 異或序列 莫對演算法 字首異或
題目描述 已知乙個長度為n的整數數列a1,a2,an,給定查詢引數l r,問在al,al 1,ar區間內,有多少子串行滿足異或和等於k。也就是說,對於所有的x,y l x y r 滿足ax ax 1 ay k的x,y有多少組。輸入輸入第一行為3個整數n,m,k。第二行為空格分開的n個整數,即a1,a...
問題 A 異或序列
時間限制 1 sec 記憶體限制 128 mb 提交 188 解決 86 提交 狀態 討論版 命題人 admin 題目描述 已知乙個長度為n的整數數列a1,a2,an,給定查詢引數l r,問在al,al 1,ar區間內,有多少子串行滿足異或和等於k。也就是說,對於所有的x,y l x y r 滿足a...
異或 異或相關
感謝 morning glory 贊助 異或異 或 de scri ptio ndes crip tion 給定 l,r l,r,求 i lr j lr i ji l r j l r i jl,r 1 09l,r 1 09 s olut ions olut ion 假設l 1,r 4l 1,r 4,...