士兵殺敵(二)

2021-08-06 03:24:05 字數 1606 閱讀 7727

時間限制:

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

**[張云聰]原創

上傳者

張云聰對線段樹的掌握還不夠熟練吧,乙個地方卡了我好久。。。

#include #include #include #include using namespace std;

const int max=1e6+10;

char str[10];

struct node

tree[max*4];

int push(int o)

void buildtree(int o, int l , int r)

int mid = (l + r )/2;

buildtree(o*2 , l , mid);

buildtree(o*2+1 , mid+1 , r);

push(o);

}int treesum(int o , int l , int r ,int x ,int y)

int mid = (l + r) / 2;

if( mid < x) //右邊

return treesum(o*2+1 , mid+1 , r , x , y);

else if( y <= mid)

return treesum(o*2 , l ,mid , x , y);

else

return treesum(o*2 , l , mid , x , mid ) + treesum(o*2+1 , mid+1 , r , mid+1 , y);

}void update(int o , int l , int r , int x, int y)

int mid = (l + r) / 2;

if( x <= mid ) //找左子樹

update(o*2 , l , mid , x , y);

else //找右子樹

update(o*2+1 , mid+1 , r ,x , y);

push(o); //更新當前節點

}int main()

if(str[0] == 'a')

} return 0;

}

士兵殺敵(二)

時間限制 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人,之後南將軍再詢問的時候...