description
lily 特 別喜歡養花,但是由於她的花特別多,所以照料這些花就變得不太容易。她把她的花依次排成一行,每盆花都有乙個美觀值。如果lily把某盆花照料的好的話, 這盆花的美觀值就會上公升,如果照料的不好的話,這盆花的美觀值就會下降。有時,lily想知道某段連續的花的美觀值之和是多少,但是,lily的算術不是 很好,你能快速地告訴她結果嗎?
input
第一行乙個整數t,表示有t組測試資料。output每組測試資料的第一行為乙個正整數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條
對於第i組資料,首先輸出"case i:"和回車。sample input19對於每個"query i j"命令,輸出第i盆花到第j盆花的美觀值之和。
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 #include4 #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國在海岸線沿...