第一次做線段樹,帆哥的一句話,我記下來了,其實,線段樹就是一種處理資料查詢和更新的手段。
然後,我的**風格,是網上的大牛們的辛苦總結,我就套用了。這裡,我還是簡單說一下線段樹,說的不好,主要方便自己複習。
線段樹,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...