HDU1166 敵兵布陣 線段樹

2021-09-20 04:12:00 字數 1498 閱讀 5219

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

input

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

每組測試資料的第一行為乙個正整數n (n<=50000),表示lily有n盆花。

接下來有n個正整數,第i個正整數ai (1<=ai<=50) 表示第i盆花的初始美觀值。

接下來每行有一條命令,命令有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盆花的美觀值之和。

思路:就是線段樹模板題,單點更新和區間求值

#include#include #include #includeusing namespace std;

#define ll long long

#define lson l, mid, rt<<1

#define rson mid + 1, r, rt<<1|1

const int maxn = 5e4 + 10;

int tree[maxn << 2];

void push_up(int rt)

void build(int l, int r, int rt)

int mid = (l + r) >> 1;

build(lson);

build(rson);

push_up(rt);

}void update(int pos, int val, int l, int r, int rt)

int mid = (l + r) >> 1;

if(pos <= mid)

update(pos, val, lson);

else

update(pos, val, rson);

push_up(rt);

}int query(int l, int r, int l, int r, int rt)

int main()

else if(s[0] == 's')

else if(s[0] == 'q')

else if(s[0] == 'e')

break;}}

return 0;

}

HDU 1166 敵兵布陣 線段樹

第一道線段樹的題目,正在學習中 include include include using namespace std define max 55555 int sum max 2 n void pushup int rt void build int l,int r,int rt int mid ...

hdu1166敵兵布陣 線段樹

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

A 敵兵布陣 線段樹 hdu 1166

a 敵兵布陣 time limit 1000ms memory limit 32768kb 64bit io format i64d i64u submit status practice hdu 1166 description c國的死對頭a國這段時間正在進行軍事演習,所以c國間諜頭子derek...