傳送門
輸入乙個長度為n(1 <= n <= 100000)陣列a[1], a[2], ..., a[n]。
輸入乙個詢問數m(1 <= m <= 100000)和m組詢問,每組詢問形如(l, r)
對於每組詢問(l, r),你需要輸出a[l] xor a[l + 1] xor ... xor a[r - 1] xor a[r],即第l個數字到第r個數字的異或。
如果你的演算法需要約n*m的時間,你將只能通過第乙個測試點。
如果你的演算法需要約n+m的時間,你將可以通過本題。
收起
第一行乙個整數n
第二行為n個整數a[1], a[2], ... a[n]
第三行乙個整數m
接下來m行,每行兩個整數l, r表示詢問。
輸出一共m行,對於每乙個詢問輸出乙個整數表示結果。
3
1 2 3
61 1
2 23 3
1 22 3
1 3
123
310
利用了字首和思想。
字首異或s[i] = s[i - 1] ^ a[i]。
由於異或運算的逆運算是它本身,也就是說兩次異或同乙個數最後結果不變,即(a ^ b) ^ b = a,則每次詢問(l,r)區間,輸出s[r]^s[l-1]。
#include #include using namespace std;
const int maxn=1e5+10;
int a[maxn],xorpre[maxn];//xorpre為字首異或陣列
int main()
int m;
cin>>m;
while(m--)
return 0;
}
51nod 1577 異或湊數
從左到右一共n個數,數字下標從1到n編號。一共m次詢問,每次詢問是否能從第l個到第r個數中 包括第l個和第r個數 選出一些數使得他們異或為k。資料量比較大。輸入請用掛 1 23 4 5 6 7 8 intread 輸出請用puts input 單組測試資料。第一行乙個整數n 0output m行,每...
子段異或(異或字首和)
傳送門 第一行乙個整數 n 代表數列長度。第二行 n 個整數,代表數列。輸出乙個整數,代表答案。示例1 複製5 1 2 3 2 1 複製 2 子段 1,3 和子段 3,5 是合法子段。首先你得知道乙個知識點就是 如果sum i 為陣列a的前i項的異或和,就是說sum i a 1 a 2 a 3 a ...
51Nod 1577 異或湊數(線性基)
description 從左到右一共 n 個數,數字下標從1到 n 編號。一共m 次詢問,每次詢問是否能從第 l 個到第 r個數中 包括第 l 個和第 r個數 選出一些數使得他們異或為 k 資料量比較大。輸入請用掛 int read 輸出請用pu tsinput 單組測試資料。第一行乙個整數n 05...