ACM 9月3日週日週末訓練心得

2021-08-07 17:33:16 字數 912 閱讀 8954

今天老師發了新的專題,是線段樹的,今天就用空餘的時間看了看前輩的部落格,了解了一下線段樹的內容,發現樹狀陣列能解決的問題線段樹基本都能解決,線段樹的用法與樹狀陣列的用法似乎有些相似,但是線段樹能維護一段區間的值,不像樹狀陣列,改變乙個地方的值就會整體更新,線段樹有時候就比樹狀陣列好用了

//線段樹需要維護的資訊

int sum[maxn*4];

#define lson i*2, l, m

#define rson i*2+1, m+1, r

//i節點收集子節點的統計結果

void pushup(int i)

//遞迴建立線段樹

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

int m=(l+r)/2;

build(lson);

build(rson);

pushup(i);//收集子節點的結果

} //在當前區間[l, r]內查詢區間[ql, qr]間的目標值

//且能執行這個函式的前提是:[l,r]與[ql,qr]的交集非空

//其實本函式返回的結果也是 它們交集的目標值

int query(int ql,int qr,int i,int l,int r)

{ //目的區間包含當前區間

if(ql<=l && r<=qr) return sum[i];

int m=(l+r)/2;

int res=0;

if(ql<=m) res += query(ql,qr,lson);

if(m主要也是四個函式,收集子節點的情況統計sum,建立線段樹,查詢某一處的值,更新維護區間或點。

今天就看了這個4個函式,再抽時間看下面的把。

新的一周也要加油。

ACM 10月1日週日週末訓練心得

由於我們讀入該掃瞄線後sum 1 的覆蓋值少了5,但是此時我們看圖知道其實這個矩形的另一條上邊了.所以我們不能用ans sum 1 了,我要執行ans abs last sum 1 其中last是上一輪讀入掃瞄線後sum 1 的值。void pushup int i,int l,int r else...

ACM 11月19日週日週末訓練心得

這週看了樹形dp的一些部落格,比如一道compuer的題目要去求樹上每個點的最遠距離是多少,這題一直被稱為樹形dp的經典是有它的道理的,因為樹dp就是把dp放到樹上做了,一般是從上到下或從下到上 利用回溯 的移轉狀態而這題很合適的需要兩次dfs。對於 有向 dp u 0 表示在u的子樹下u的最遠距離...

ACM 11月26日週日週末訓練心得

這週末關於樹形dp的專題已經結束了,需要對這個專題進行一下總結,就我做的這些題進行一下總結。樹形dp就是根據問題的描述,問題裡的東西與樹一樣擁有子節點和父節點的關係,而做一些對於這些資訊的檢索以及尋找一些問題所需要的答案則需要尋找一些狀態變化和轉移。選擇一些對樹形dp印象比較深刻的題目進行思考。a這...