HDU HDOJ1166 敵兵布陣 基礎線段樹

2021-07-31 20:44:00 字數 2295 閱讀 5830

problem description

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

1101 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

endsample output

case 1: 6

33 59

誒。。。最近部落格更新的有點快啊。。。明明是個不愛寫部落格的人,不是我的作風啊。。。

不過寫這篇是為了擬補  這篇的遺憾,本來這篇只是想給大家換換思路,後來發現。。。。。**實在寫的太爛了,這樣容易被人鄙視啊,所以剛好又刷了一道線段樹的題目,特此寫個題解,這篇的**應該還是比較不錯的

為什麼使用陣列線段樹呢,因為這是乙個滿二叉樹(關於滿二叉樹,國內的定義一般是指有2^n-1個節點,國際的定義一般是要麼有兩個子節點,要麼是葉子,此處所說的是國際的定義版本),而滿二叉樹的操作又非常方便,左孩子節點就是2*i,右節點就是2*i-1,父節點就是i/2,也不用擔心鏈式操作中臨時指標變數不會自動釋放的問題

#include#includeusing namespace std;

struct tree

p[3*50005];

int a[50005],w[50005];//w是用來記錄單個數字的位置在哪,用空間換時間,不要這個陣列去搜尋應該也不會超時

void bulid(int l,int r,int now)//建樹

int mid=(l+r)/2;

bulid(l,mid,now*2);

bulid(mid+1,r,now*2+1);

p[now].v=p[now*2].v+p[now*2+1].v;

}int query(int l,int r,int now)//查詢

void update(int now)//更改

int main()

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

else}}

return 0;

}



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想知道某段連續的花的美觀值之和是多少...