線段樹 初始化與更改 查詢

2021-07-26 02:11:24 字數 832 閱讀 6355

線段樹是一種二叉搜尋樹,與區間樹相似,它將乙個區間劃分成一些單元區間,每個單元區間對應線段樹中的乙個葉結點。

對於線段樹中的每乙個非葉子節點[a,b],它的左兒子表示的區間為[a,(a+b)/2],右兒子表示的區間為 [(a+b)/2+1,b]。使用一次的時間複雜度為o(logn),未優化的空間複雜度為2n。

#include

#include

#include

using namespace std;

int a[200010];

struct node

tr[400010];int len;

void bt(int l,int r)//初始化(建樹)函式

}void change(int now,int

x,int k)//更改函式

intlc=tr[now].lc,rc=tr[now].rc;

int mid=(tr[now].l+tr[now].r)/2;

if(x

<=mid) change(lc,x,k);

else

if( mid+1

<=x) change(rc,x,k);

tr[now].c=max(tr[lc].c,tr[rc].c);

}int findmax(int now,int l,int r)//查詢函式

int main()

}return

0;}

推薦:《線段樹—update延緩賦值優化》

《線段樹—離散化壓縮空間優化》

《線段樹—倒推優化》

EasyUi初始化樹

fillorgid combotree editable false,loadfilter function rows 返回樹形結構 常規的 rows 介面返回的結果 id rows中物件的主鍵id textname rows中單個物件中用於顯示的欄位名 superid rows中單個物件中用於定位...

直接初始化與拷貝 複製 初始化

認識這兩種初始化有助於我們加深對語言的理解,可以更好的優化 我們常見的幾種初始化的形式 string str1 first 拷貝初始化,編譯器允許把這句話改寫為string str first 但是string 類必須有 public 的拷貝 移動 建構函式 string str2 10,a 直接初...

直接初始化與拷貝 複製 初始化

std set和std map都有乙個insert和emplace成員函式,那麼,他們的區別是什麼呢?他們都往 set或map 裡增加乙個元素,區別在於新元素的構造上。emplace 使用直接構造,insert 使用複製 拷貝 構造。那麼直接構造和複製構造有什麼區別呢?認識這兩種初始化 構造 有助於...