給定乙個由n個正整數組成的序列 。
兩種操作:
1 x y:表示將 axax的值改為y;
2 x y:表示詢問區間[x,y]的異或和;
第一行,兩個正整數n和m,用空格隔開。
第二行,n個正整數表示序列。
以下m行,每行三個數,表示乙個操作,格式如題面。
對於每個操作2詢問佔一行乙個整數。
10101
97810
9773
21103
1722
3816
4135
1992
4913
9228
185
9
103
對於40%的資料:1<=n,m<=10000
對於100%的資料:1<=n,m<=200,000
這道題其實就是模板改一下運算而已。a ^ b ^ a=b是重要前提。每次讀進來乙個數都與之前的數進行異或運算,修改時再異或原來的數再異或新的數即可完成修改。
#include
#define m(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define mod 1000000009
using
namespace std;
inline
void
read
(int
&x)while
(ch>=
'0'&& ch<=
'9')
if(c==
'-')x=
-x;}
int n,m,i,j;
int a[
200005
],b[
200005];
intlowbit
(int x)
void
updata
(int x,
int y,
int z)
intsum
(int x)
intmain()
while
(m--
)else
printf
("%d\n"
,sum
(y)^
sum(x-1)
);}return0;
}
505 動態區間異或和
505.動態區間異或和 統計描述 提交自定義測試 題目描述 給定乙個由n個正整數組成的序列 兩種操作 1 x y 表示將 axax的值改為y 2 x y 表示詢問區間 x,y 的異或和 輸入描述 第一行,兩個正整數n和m,用空格隔開。第二行,n個正整數表示序列。以下m行,每行三個數,表示乙個操作,格...
UOJ 505 動態區間異或和
給定乙個由n個正整數組成的序列 兩種操作 1 x y 表示將 a x ax ax的值改為y 2 x y 表示詢問區間 x,y 的異或和 第一行,兩個正整數n和m,用空格隔開。第二行,n個正整數表示序列。以下m行,每行三個數,表示乙個操作,格式如題面。對於每個操作2詢問佔一行乙個整數。10 10 1 ...
小Q的無敵異或 所有區間的異或和
給定乙個長度為n的非負整數序列,求序列的所有子區間異或值之和模998244353,和所有子區間之和的異或值。n 105,ai 106。題解 先考慮第一問。令xor i 表示前i項的異或值,xor l,r 表示第l項到第r項的異或值,那麼xor l,r xor r xor l 1 考慮xor l,r ...