c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek和他手下tidy又開始忙乎了。a國在海岸線沿直線布置了n個工兵營地,derek和tidy的任務就是要監視這些工兵營地的活動情況。由於採取了某種先進的監測手段,所以每個工兵營地的人數c國都掌握的一清二楚,每個工兵營地的人數都有可能發生變動,可能增加或減少若干人手,但這些都逃不過c國的監視。
**情報局要研究敵人究竟演習什麼戰術,所以tidy要隨時向derek匯報某一段連續的工兵營地一共有多少人,例如derek問:「tidy,馬上匯報第3個營地到第10個營地共有多少人!」tidy就要馬上開始計算這一段的總人數並匯報。但敵兵營地的人數經常變動,而derek每次詢問的段都不一樣,所以tidy不得不每次都乙個乙個營地的去數,很快就精疲力盡了,derek對tidy的計算速度越來越不滿:"你個死肥仔,算得這麼慢,我炒你魷魚!」tidy想:「你自己來算算看,這可真是一項累人的工作!我恨不得你炒我魷魚呢!」無奈之下,tidy只好打**向計算機專家windbreaker求救,windbreaker說:「死肥仔,叫你平時做多點acm題和看多點演算法書,現在嚐到苦果了吧!」tidy說:"我知錯了。。。"但windbreaker已經掛掉**了。tidy很苦惱,這麼算他真的會崩潰的,聰明的讀者,你能寫個程式幫他完成這項工作嗎?不過如果你的程式效率不夠高的話,tidy還是會受到derek的責罵的.
input第一行乙個整數t,表示有t組資料。
每組資料第一行乙個正整數n(n<=50000),表示敵人有n個工兵營地,接下來有n個正整數,第i個正整數ai代表第i個工兵營地里開始時有ai個人(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詢問,輸出乙個整數並回車,表示詢問的段中的總人數,這個數保持在int以內。
sample input
1sample output101 2 3 4 5 6 7 8 9 10
query 1 3
add 3 6
query 2 7
sub 10 2
add 6 3
query 3 10
end
case 1:63359水題沒啥好說的,比較奇怪的是乙個bug:在while塊內定義x和y貌似不行(不知道為啥),
於是換到塊外,但此時忘記刪掉塊內的int x, y了。
然後比較詭異的是這樣跑出來所有的輸出都是0,
但如果添上一條cout<#include#include
#include
#include
#define size 50005
using
namespace
std;
inta[size], n, q;
inline
intread()
while(isdigit(p))
return f ? -a : a;
}struct
segmenttree
t[4*size];
void build(int p, int l, int
r)
int mid = (l + r) >> 1
; build(
2 *p, l, mid);
build(
2 * p + 1, mid + 1
, r);
t[p].sum = (t[2 * p].sum + t[2 * p + 1
].sum);
}void spread(int
p)void change(int p, int l, int r, int
k) spread(p);
t[p].sum = (t[2 * p].sum + t[2 * p + 1
].sum);
int mid = (t[p].l + t[p].r) >> 1
;
if(l <= mid) change(2 *p, l, r, k);
if(r > mid) change(2 * p + 1
, l, r, k);
t[p].sum = (t[2 * p].sum + t[2 * p + 1
].sum);
}int ask(int p, int l, int
r) spread(p);
int mid = (t[p].l + t[p].r) >> 1
;
int val = 0
;
if(l <= mid) val = (val + ask(2 *p, l, r));
if(r > mid) val = (val + ask(2 * p + 1
, l, r));
return
val;
}int
main()
else
if(op[0] == 's'
)
else
if(op[0] == 'q'
) }}
return0;
}
hdu 1166 敵兵布陣
這是一道線段樹里最簡單的一類題目了,單點更新型別!include define lson l m rt 1 define rson m 1 r rt 1 1 const int maxx 55555 int sum maxx 2 void pushup int rt void build int l...
hdu 1166 敵兵布陣
線段樹的模版 沒什麼思想 include include include include include include include include include include include include include define ll long long define vi vec...
HDU 1166 敵兵布陣
description lily 特別喜歡養花,但是由於她的花特別多,所以照料這些花就變得不太容易。她把她的花依次排成一行,每盆花都有乙個美觀值。如果lily把某盆花照料的好的話,這盆花的美觀值就會上公升,如果照料的不好的話,這盆花的美觀值就會下降。有時,lily想知道某段連續的花的美觀值之和是多少...