線段樹基於分治的思想會分治的思想,用於區間求值問題。
比如說:求區間的最大值,最小值等等;
給出乙個長隊為8的區間對他進行操作。
先將他分成若干區間(如圖藍色為區間標號,紅色為區間)直到分成單個點並把所需要的資訊存到單點上。
建樹
void build_tree(int k,int l,int r)//如果l==r說明為單點把資訊存到點上
int mid=(l+r)/2;
build_tree(k*2,l,mid);//對左兒子建樹
build_tree(k*2+1,mid+1,r);對右兒子建樹
treel[k].max=max(treel[k*2].max,treel[k*2+1].max);//其他資訊如最大值,最小值
}
注意:陣列應開到4倍如果線段樹寫的不好4倍也不夠得8倍23333.
查詢
int query(int k)
更新單點更新與查詢相似所以**就不放了
相信你已經掌握基本的線段樹了趕緊刷提去
火星補鍋 siano 神奇的線段樹
本來以為很難打的,沒想到主幹一次就打對了,然而把輸入的b和d弄混了,這sb錯誤調了兩個小時。神奇的線段樹。注意到有乙個性質,無論怎麼割草,生長速度快的一定不會比生長速度慢的矮。因此可以先排個序,然後就可以用線段樹維護了。首先維護區間的sum,這個很顯然。然後會發現乙個問題,每次割草時,不知道從 開始...
Trie樹的二三事QWQ
寫在前面trie,又稱字典樹,是一種用於實現字串快速檢索的多叉樹結構。trie的每個結點都擁有若干字元指標,若在插入或檢索字串時掃瞄到乙個字元c,就沿著當前節點的c這個字元指標,走向該指標指向的結點。我的沒有指標的版本理解 樹上的每個結點都記錄了兩個資訊,一是這個結點所代表的字元,二是這個字元是否是...
線段樹 02 構建線段樹
public inte ce merger 不能再縮小的基本問題是 對treeindex指向的節點的情況進行討論 public class segmenttree 在treeindex的位置建立表示區間 l.r 的線段樹 private void buildsegmenttree int treei...