nyoj123 士兵殺敵(四)樹狀陣列 插線問點

2022-05-06 08:30:07 字數 1218 閱讀 9272

士兵殺敵(四)

時間限制: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類似於士兵殺敵二,那個主要是求的一段的和,二這個球的是乙個點的數,演算法大概相同,多了一次呼叫

1 #include2 #include3 #include4

using

namespace

std;

5const

int maxx=1000003;6

intc[maxx],m;

7int lowbit(intk)8

11void add(int k,int he)//

每一項增加乙個值

1218}19

void q(int

k)20

27 printf("

%d\n

",query);28}

29int

main()

3043

else

if(ch[0]=='q'

)4448}

49return0;

50 }

nyoj 123 士兵殺敵(四) 樹狀陣列

時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍麾下有百萬精兵,現已知共有m個士兵,編號為1 m,每次有任務的時候,總會有一批編號連在一起人請戰 編號相近的人經常在一塊,相互之間比較熟悉 最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪乙個人到底...

nyoj123士兵殺敵(四)(樹狀陣列)

時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍麾下有百萬精兵,現已知共有m個士兵,編號為1 m,每次有任務的時候,總會有一批編號連在一起人請戰 編號相近的人經常在一塊,相互之間比較熟悉 最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪乙個人到底...

NYOJ123 士兵殺敵(四)

includeconst int n 1000002 struct tree tree tree n 2 void build int root,int l,int r void insert int root,int b,int e,int v int m tree root left tree ...