hdu 1166 樹狀陣列

2022-08-23 05:45:10 字數 2892 閱讀 7791

#include

#include

#include

using

namespace

std;

int

lowbit

(intx)

//make sure the set of the array 求最小冪2^k

int

sum(

intend

,int

all)

//solve sum 求前n 項和

return

sum;

}

void

puls

(int

set,

intnum

,int

all,

intn

)//array number increase or decrease 某個元素進行加法操作

}

struct

data

;

int

main

()

data temp

;

printf

("case %d:\n"

,++count

);

while

(cin

>>

temp

.str

&&temp

.str

!="end"

)

if(

temp

.str

=="add"

)

if(

temp

.str

=="sub"

)

puls

(temp.i

,-temp.j

,all,n

);

}

}

return

0;

}

/*

第一行乙個整數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

10

1 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:

6

33

59

*/

來自為知筆記(wiz)

樹狀陣列 HDU1166

繼續上次那題,我們現在採用樹狀陣列來解。樹狀陣列主要用來進行區間求和統計和定點更新操作,樹狀陣列的儲存是如下方式的 假設陣列a為a 1 a 2 a 3 a n 現在我們另陣列c 1 a 1 c 2 a 1 a 2 c 3 a 3 c 4 a 1 a 2 a 3 a 4 這是啥結構呢?其實c i a ...

樹狀陣列 HDU1166

題意為 t組測試陣列,跟著乙個整數n,n n 50000 表示n個營地 n後面跟著n個數ai 1 50 表示每個營地人數。然後輸入三種操作 最多有40000條操作 1.add x y x營地增加y人。2.query x y 查詢x y營地的總人數。3.sub x y x營地減少y人。end 結束。如...

Hdu1166 樹狀陣列

problem description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的...