ACM 敵兵布陣(經典的線段樹)

2022-04-05 14:33:12 字數 1775 閱讀 4860

description

lily 特 別喜歡養花,但是由於她的花特別多,所以照料這些花就變得不太容易。她把她的花依次排成一行,每盆花都有乙個美觀值。如果lily把某盆花照料的好的話, 這盆花的美觀值就會上公升,如果照料的不好的話,這盆花的美觀值就會下降。有時,lily想知道某段連續的花的美觀值之和是多少,但是,lily的算術不是 很好,你能快速地告訴她結果嗎?

input

第一行乙個整數t,表示有t組測試資料。

每組測試資料的第一行為乙個正整數n(n<=50000),表示lily有n盆花。接下來有n個正整數,第i個正整數ai表示第i盆花的初始美觀值(1<=ai<=50)。

接下來每行有一條命令,命令有4種形式:

(1)add i j, i和j為正整數,表示第i盆花被照料的好,美觀值增加j(j<=30)

(2)sub i j, i和j為正整數,表示第i盆花被照料的不好,美觀值減少j(j<=30)

(3)query i j, i和j為正整數,i<=j,表示詢問第i盆花到第j盆花的美觀值之和

(4)end,表示結束,這條命令在每組資料最後出現

每組資料的命令不超過40000條

output

對於第i組資料,首先輸出"case i:"和回車。

對於每個"query i j"命令,輸出第i盆花到第j盆花的美觀值之和。

sample input19

7 9 8 4 4 5 4 2 7

query 7 9

add 4 9

query 3 6

sub 9 6

sub 3 3

query 1 9

endsample output

case 1:

1330

50講解:這是一道比較經典的線段樹題目,在此題中使用了線段樹技巧和位操作(速度更快些),哦對了還用了sort函式(自動從小到大排序),在#include裡面

1 #include2 #include3 #include

4 #include5

6using

namespace

std;78

9const

int maxn=50001;10

1112

struct

flower

13segtree[maxn*4

];17

1819

20int

num[maxn];

2122

23void build(int i,int left,int right)//

遞迴演算法,構建一顆線段樹

2432

int mid=(left+right)>>1;//

除233 build(i<<1,left,mid);//

i*2 a

34 build(i<<1|1,mid+1,right);//

i*2+1 b

35 segtree[i].nsum=segtree[i<<1].nsum+segtree[i<<1|1].nsum; //

依次求線段和36}

3738

39void add(int i,int tleft,int

b)40

5152

53int query(int i,int left,int

right)

5466

6768

intmain()

6998}99

100return0;

101 }

線段樹 A敵兵布陣

include stdio.h include cstdio include algorithm using namespace std define inf 0x3f3f3f3f const int max n 1e5 10 int a max n int b max n 1 void init ...

敵兵布陣 線段樹

description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的一清二楚,每個工...

敵兵布陣 線段樹

敵兵布陣 time limit 1000msmemory limit 32768kb64bit io format i64d i64u submit status description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿...