6759A異或序列

2022-04-13 20:03:33 字數 1203 閱讀 5974

題目描述

已知乙個長度為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項異或的值

#includeusing

namespace

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,...