HDU 1166 ,線段樹模板,單點更新,區間總和

2022-04-01 08:18:37 字數 887 閱讀 1561

第一次做線段樹,帆哥的一句話,我記下來了,其實,線段樹就是一種處理資料查詢和更新的手段。

然後,我的**風格,是網上的大牛們的辛苦總結,我就套用了。這裡,我還是簡單說一下線段樹,說的不好,主要方便自己複習。

線段樹,3個步驟,建樹,查詢,更新,

建樹:到底部就是a陣列的值,建立左右子樹後,向上推根,根為左右子樹的值

查詢:查詢區間可能橫跨,ret要更新,遞迴搜到該區間大於新的區間,就是sum[rt]

#include #include 

#define lson l,m,rt<<1

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

const

int maxn = 55555

;int sum[maxn<<2

];void pushup(int

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

rt)

int m = (l+r)>>1

; build(lson);

build(rson);

pushup(rt);

}//單點更新

void update(int p,int add,int l,int r,int

rt)

int m=(l+r)>>1

;

if(p<=m) update(p,add,lson);

else

update(p,add,rson);

pushup(rt);

}//區間總和

int query(int l,int r,int l,int r,int

rt)int

main()

}return0;

}

線段樹單點更新hdu1166

學習自 先序建子樹,然後回溯建立父節點 更新時先遞迴更新子節點,然後再回溯更新父節點 回溯思想很重要 include using namespace std const int maxn 50005 int sum maxn 2 void build int l,int r,int rt void ...

HDU 1166 線段樹單點更新

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

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

中文題目,題意還是很簡單的,給你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 e...