士兵殺敵(二)

2021-08-07 09:07:59 字數 947 閱讀 5003

時間限制:

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

解題分析:

方法一:利用陣列進行遍歷修改、求和操作,時間複雜度為o(n) ,但是此題查詢次數極多,如用此方法極容易超時,故此方法就不列舉了。

方法二:利用資料結構,用樹狀陣列,根據樹狀陣列性質,可知本題涉及內容為插點問線,時間複雜度為o(log(n)),所求的區間 sum[x,y]  = c[y] - c[x-1];

樹狀陣列—ac**:

#include#include#include#includeint c[10000005];

using namespace std;

int judge(int x)

int sum(int x)

return sum;

}int find(int x,int y,int z)

}int main(void)

for(i=1;i

士兵殺敵(二)

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

士兵殺敵(二)

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

士兵殺敵(二)

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