時間限制:
2000 ms | 記憶體限制:
65535 kb
難度:5 描述
南將軍麾下有百萬精兵,現已知共有m個士兵,編號為1~m,每次有任務的時候,總會有一批編號連在一起人請戰(編號相近的人經常在一塊,相互之間比較熟悉),最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪乙個人到底有多少軍功就是乙個比較困難的事情,軍師小工的任務就是在南將軍詢問他某個人的軍功的時候,快速的報出此人的軍功,請你編寫乙個程式來幫助小工吧。
假設起始時所有人的軍功都是0.
輸入
只有一組測試資料。
每一行是兩個整數t和m表示共有t條指令,m個士兵。(1<=t,m<=1000000)
隨後的t行,每行是乙個指令。
指令分為兩種:
一種形如
add 100 500 55 表示,第100個人到第500個人請戰,最終每人平均獲得了55軍功,每次每人獲得的軍功數不會超過100,不會低於-100。
第二種形如:
query 300 表示南將軍在詢問第300個人的軍功是多少。
輸出對於每次查詢輸出此人的軍功,每個查詢的輸出佔一行。
樣例輸入
4 10樣例輸出add 1 3 10
query 3
add 2 6 50
query 3
10思路,樹狀陣列 插線問點;舉個例子:60
如果要更新a[3]到a[7]的值 可以先更新a[7](包含a[7])之前的,再減去a[3](不包含a[3])之前的,感覺這樣就夠了,
但是用樹狀陣列的更新都是父親節點 並未更新到具體的葉子節點,葉子節點的最終結果是它之上的所有父親節點的值得和,a[1]的值實為c[2] c[4] c[8]的和
code:
#includeusing namespace std;
int c[1000100],n;
int lowbit(int x)
void add(int pos,int t)
}void querry(int pos)
printf("%d\n",ans);
//cout<
123士兵殺敵(四)(樹狀陣列 插線問點)
時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍麾下有百萬精兵,現已知共有m個士兵,編號為1 m,每次有任務的時候,總會有一批編號連在一起人請戰 編號相近的人經常在一塊,相互之間比較熟悉 最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪乙個人到底...
nyoj123 士兵殺敵(四)樹狀陣列插線問點
時間限制 2000 ms 記憶體限制 65535 kb 難度 5描述 南將軍麾下有百萬精兵,現已知共有m個士兵,編號為1 m,每次有任務的時候,總會有一批編號連在一起人請戰 編號相近的人經常在一塊,相互之間比較熟悉 最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪乙個人到底有...
nyoj123 士兵殺敵(四)樹狀陣列 插線問點
士兵殺敵 四 時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍麾下有百萬精兵,現已知共有m個士兵,編號為1 m,每次有任務的時候,總會有一批編號連在一起人請戰 編號相近的 人經常在一塊,相互之間比較熟悉 最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們...