題目鏈結
題意:給你n個數,有兩種操作,op=1,對從l到r的數求和,op=2,對從l到r的值xor val。
思路:由於亦或是位運算,我們可以考慮位運算的關係,
1 xor 1=0,
0 xor 1=1,
1 xor 0=1;
0 xor 0=0;
可以看出0 xor x=x;
1 xor 1=0,1 xor 0=1,就是1變0,0變1;
我們把每個數都拆成2進製,由於是求和,只考慮每一位上1的個數,按位展開求和即可。那麼我們亦或乙個數也是只亦或位=1的時候,開20顆線段樹就可以維護每一位的狀態。
其實就是普通的區間更新區間求和問題,只不過線段樹是二維的
線段樹 區間求和
給定一數列,規定有兩種操作,一是修改某個元素,二是求區間的連續和。輸入資料第一行包含兩個正整數n,m n 100000,m 500000 以下是m行,每行有三個正整數k,a,b k 0或1,a,b n k 0時表示將a處數字加上b,k 1時表示詢問區間 a,b 內所有數的和。對於每個詢問輸出對應的答...
線段樹(區間更新求和)
poj 3468 include using namespace std define max 100100 struct node 求區間長度 int get dis node tree max 3 long long d max 建樹 long long build int left,int r...
線段樹 區間求和模板 (區間修改)
include include include include include include include include include define mem a memset a,0,sizeof a define mem2 a memset a,1,sizeof a define mod ...