線段樹單點更新 求和

2021-08-06 03:58:34 字數 1194 閱讀 5134

第一行乙個整數t,表示有t組資料。

每組資料第一行乙個正整數n(n<=50000),表示敵人有n個工兵營地,接下來有n個正整數,第i個正整數ai代表第i個工兵營地里開始時有ai個人(1<=ai<=50)。

接下來每行有一條命令,命令有4種形式:

(1) add i j,i和j為正整數,表示第i個營地增加j個人(j不超過30)

(2)sub i j ,i和j為正整數,表示第i個營地減少j個人(j不超過30);

(3)query i j ,i和j為正整數,i<=j,表示詢問第i到第j個營地的總人數;

(4)end 表示結束,這條命令在每組資料最後出現;

每組資料最多有40000條命令

output

對第i組資料,首先輸出「case i:」和回車,

對於每個query詢問,輸出乙個整數並回車,表示詢問的段中的總人數,這個數保持在int以內。

sample input

1

101 2 3 4 5 6 7 8 9 10

query 1 3

add 3 6

query 2 7

sub 10 2

add 6 3

query 3 10

end

sample output

case 1:633

59

#include#include#include#includeusing namespace std;

#define n 50002

int sum[n<<2];

void creat(int rf,int l,int r)

int mid=(r+l)>>1;

creat(rf*2,l,mid);

creat(rf*2+1,mid+1,r);

sum[rf]=sum[2*rf]+sum[2*rf+1];

}int query(int rf,int l,int r,int a,int b)

void add(int rf,int l,int r,int a,int b)

int mid=(r+l)>>1;

if(mid>t;

while(t--)

}return 0;

}

線段樹 的單點更新和區間求和

include int sum 100 void build int lift,int right,int rt void updata int point,int add,int lift,int right,int rt int query int l,int r,int l,int r,int...

線段樹單點更新

hdu 1166 單點更新,求區間和 第一次寫線段樹,照著大神的抄了一遍 include include include define max 50100 define mid l r 1 define lson l,m,rt 1 define rson m 1,r,rt 1 1 using nam...

線段樹(單點更新)

1.hdu 1166 敵兵布陣 單點更新,區間求和,最裸的線段樹 include include include using namespace std define maxn 50010 define lson l,m,rt 1 define rson m 1,r,rt 1 1 struct tr...