第14周訓練總結 線段樹

2021-10-06 21:54:09 字數 1016 閱讀 7149

線段樹的實現:

長度為n的陣列,在建樹過程中若未使用下標0,由大區間【1,n】出發分為【1,(1+n)/2】和【(1+n)/2+1,n】這兩個子區間,然後兩個子區間再次均分,形成等比數列,公比為2

struct tree

tree[n*4];

首先要明白一棵二叉樹的某一結點的序號為  id,那麼他的左兒子為  id*2,右兒子的序號為  id*2+1

建樹過程  (1~n 個節點) 

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

else

}

在樹中更新某乙個節點,並將涉及到的區間也更新

void update(int pos,int val,int id)

else

else

tree[id].sum=tree[id*2].sum+tree[id*2+1].sum;

tree[id].maxx=max(tree[id*2].maxx,tree[id*2+1].maxx);

}}

查詢給定區間內的  sum 或最值

int query(int l,int r,int id)

}

struct tree

tree[n*4];

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

else

}void update(int pos,int val,int id)

else

else

tree[id].sum=tree[id*2].sum+tree[id*2+1].sum;

tree[id].maxx=max(tree[id*2].maxx,tree[id*2+1].maxx);

}}int query(int l,int r,int id)

}

線段樹與樹狀陣列學習總結 線段樹

點動成線 那麼就是說一條線段可以分成若干個點,再想想我們最常用的一維陣列,構成陣列的是乙個個的變數,如果把變數看成乙個個點,那麼陣列就是一條線了!而線段樹,就是一棵由線段構成的二叉樹,每個結點都代表一條線段 a,b 也就是我們前面說的一串變數 非葉子的結點所對應的線段都有兩個子結點,左兒子代表的線段...

備考第14周總結

總的來說這個星期效率不是很高,驗收專案耽誤了一天,自己又差不多休息了一天。自行車又被偷了,圖書館也關門了,每天只能慢慢走去自習室。英語也學了那麼久了,我覺得進步還是比較明顯的,一開始做閱讀完全沒有感覺,現在開始慢慢的有感覺了,儘管有時候一篇閱讀還是會錯2道,但至少知道自己有了很大的提公升。後面要慢慢...

週中訓練筆記11 線段樹總結

線段樹專題接近尾聲了,是時候總結一波了,說來慚愧,線段樹專題差不多都是參照題解才做出來的,雖然知道是套模板但是具體細節真的很拿人啊。主要總結一下線段樹的模板吧,題目的 實現都要以模板為框架構造 首先提出乙個問題 給你n個數,有兩種操作 1 給第i個數的值增加x 2 詢問區間 a,b 的總和是什麼?輸...