士兵殺敵(二) 線段樹

2022-07-29 04:15:13 字數 1763 閱讀 6388

時間限制:1000 ms  |  記憶體限制:65535 kb

難度:5

描述南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。

小工是南將軍手下的軍師,南將軍經常想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。

南將軍的某次詢問之後士兵i可能又殺敵q人,之後南將軍再詢問的時候,需要考慮到新增的殺敵數。

輸入只有一組測試資料

第一行是兩個整數n,m,其中n表示士兵的個數(1

輸出對於每次查詢,輸出乙個整數r表示第m號士兵到第n號士兵的總殺敵數,每組輸出佔一行

樣例輸入

5 6

1 2 3 4 5

query 1 3

add 1 2

query 1 3

add 2 3

query 1 2

query 1 5

樣例輸出

688

20以1為開頭的線段樹要開兩倍大小。

#include#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;typedef unsigned

long

long

ull;

#define maxn 2000004

#define l 31

#define inf 1000000009

#define eps 0.00000001

/*線段樹的實現

*/struct

treenode

t[maxn];

//線段樹

int a[maxn],max;//

給出的陣列

char op[10

];void build(int beg,int end,int

root)

else

return;}

/*ll query(int root, int nbeg, int nend, int qbeg, int qend)//這個好像沒有辦法處理 一種情況!?

}void add(int i, int num, int

pos)

//cout << i << ' ' << num << ' ' << pos << ' ' << t[pos].l << ' ' << t[pos].r << endl;

int mid = (t[pos].l + t[pos].r) / 2

;

if (i <=mid)

add(i, num, pos*2

);

else

add(i, num, pos*2+1

); t[pos].val = t[pos * 2].val + t[pos * 2 + 1

].val;

}int

main()

return0;

}

士兵殺敵(二) 線段樹

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

士兵殺敵(二)(線段樹)

士兵殺敵 二 時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍經常想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。南將軍的某次詢問之後士兵i可能又殺敵q人,之後南將...

nyoj116 士兵殺敵(二) 線段樹)

時間限制 1000 ms 記憶體限制 65535 kb 難度 5 描述 南將軍手下有n個士兵,分別編號1到n,這些士兵的殺敵數都是已知的。小工是南將軍手下的軍師,南將軍經常想知道第m號到第n號士兵的總殺敵數,請你幫助小工來回答南將軍吧。南將軍的某次詢問之後士兵i可能又殺敵q人,之後南將軍再詢問的時候...