難度: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
1060
樹狀陣列:
#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 #include6using
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,每次有任務的時候,總會有一批編號連在一起人請戰 編號相近的人經常在一塊,相互之間比較熟悉 最終他們獲得的軍功,也將會平分到每個人身上,這樣,有時候,計算他們中的哪乙個人到底...