士兵殺敵(四) 樹狀陣列 線段樹

2022-03-29 13:29:00 字數 2304 閱讀 2094

難度: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

樹狀陣列:

#include#include

#include

#include

#include

using

namespace

std;

#define mem(x,y) memset(x,y,sizeof(x))

#define l tree[root].l

#define r tree[root].r

#define s tree[root].sum

#define lson root<<1,l,mid

#define rson root<<1|1,mid+1,r

#define la tree[root].lazy

#define v tree[root].val

const

int inf=0x3f3f3f3f

;const

int maxn=1000010

;int

tree[maxn];

int lowbit(int

x)int update(int x,intv)}

int query(int

x)

return

ans;

}int

main()

else

}return0;

}

線段樹:

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7#define mem(x,y) memset(x,y,sizeof(x))

8#define l tree[root].l

9#define r tree[root].r

10#define s tree[root].sum

11#define lson root<<1,l,mid

12#define rson root<<1|1,mid+1,r

13#define la tree[root].lazy

14#define v tree[root].val

15#define now s=tree[root<<1].sum+tree[root<<1|1].sum

16const

int inf=0x3f3f3f3f;17

const

int maxn=1000010;18

struct

node;

21 node tree[maxn<<2

];22

intans;

23void build(int root,int l,int

r)30}31

void update(int root,int l,int r,int

v)37

else

*/45

if(mid>=r)update(root<<1

,l,r,v);

46else

if(mid1|1

,l,r,v);

47else51}

52}53int query(int root,int

x)61

intmain()

73else77}

78return0;

79 }

士兵殺敵(樹狀陣列)

南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍經常想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。南將軍的某次詢問之後士兵i可能又殺敵q人,之後南將軍再詢問的時候,需要考慮到新增的殺敵數。輸入只有一組測試資料 第一行是兩個整數n,m,...

NYOJ 士兵殺敵 (樹狀陣列)

首先看一道題 描述南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍經常想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。南將軍的某次詢問之後士兵i可能又殺敵q人,之後南將軍再詢問的時候,需要考慮到新增的殺敵數。輸入 只有一組測試資料 第一...

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

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