hdu1166 敵兵布陣(線段樹經典的單點更新)

2021-07-16 14:12:26 字數 877 閱讀 6308

中文題目,題意還是很簡單的,給你n個數,然後有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 表示結束,這條命令在每組資料最後出現;

要求對每個query輸出相應答案。

很明顯,對於區間的操作,當然是用線段樹來解比較方便了。

#include#include#include#include#define n 50010

#define inf 999999999

using namespace std;

struct tree

;tree p[n*4];

int a[n];

void build(int i,int l,int r)//建樹

}void add(int i,int k,int m)//對該點進行增加或減少操作;

int mid=(p[i].l+p[i].r)/2;

if(k<=mid)

add(i*2+1,k,m);

else

add(i*2+2,k,m);//採用遞迴的方法找要更改的點

p[i].sum=p[i*2+1].sum+p[i*2+2].sum;//在遞迴返回的過程中順便將各個區間的sum值相應的改變

}int query(int i,int s,int e)//查詢操作,分在區間左側,在區間右側,包含在區間內三種情況;

int main()

}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...