505 動態區間異或和

2021-09-25 08:45:49 字數 1222 閱讀 8207

給定乙個由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 ...