長度為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 的總和是什麼?輸...