劃分樹,類似線段樹,主要用於求解某個區間的第k 大元素(時間複雜度log(n)),快排本也可以快速找出,但快排會改變原序列,所以每求一次都得恢復序列。
建樹 o(n
logn
)o(nlogn)
o(nlog
n) 查詢結點 o(l
ogn)
o(logn)
o(logn
) poj 2104
題目意思就是,給你n 個數的原序列,有m 次詢問,每次詢問給出l、r、k,求原序列l 到r 之間第k 大的數。n範圍10萬,m範圍5千,這道題用快排也可以過,快排過的時間複雜度 o(n
∗m)
o(n*m)
o(n∗m)
,而劃分樹是 o(m
logn
)
o(mlogn)
o(mlog
n)(實際上應該是 o(n
logn
)
o(nlogn)
o(nlog
n)才對,因為建圖時間是o(n
logn
)
o(nlogn)
o(nlog
n),n又比m大),分別ac後,時間相差很明顯。
#include
#include
#include
#define n 100010
using
namespace std;
typedef
long
long ll;
int a[n]
;//原陣列
int sorted[n]
;//排序好的陣列
//是一棵樹,但把同一層的放在乙個陣列裡。
int num[20]
[n];
//num[i] 表示i前面有多少個點進入左孩子
int val[20]
[n];
//20層,每一層元素排放,0層就是原陣列
void
build
(int l,
int r,
int ceng)
else
}build
(l,mid,ceng+1)
;build
(mid+
1,r,ceng+1)
;}intlook
(int ceng,
int sl,
int sr,
int l,
int r,
int k)
else
}int
main()
sort
(sorted+
1,sorted+n+1)
;build(1
,n,0);
while
(m--)}
return0;
}
樹模型知識點
疑問learning to rank之lambdamart的前世今生 gbdt原理 非常重要 決策樹 上 id3 c4.5 cart 及剪枝 資料探勘十大演算法之cart詳解 深入理解gbdt回歸演算法。對gbdt的原理講解的比較清晰,舉的例子也比較好。參考learning to rank之lamb...
知識點 虛樹
簡介 聽名字高大上,實際上沒什麼東西 虛樹的題主要難在如何操作虛樹 給出 k 個關鍵點,我們要建出一棵只包含這些關鍵點和他們 lca 的點數最少的樹,以實現 dp 等操作。標誌性的資料範圍是 sum leq 10 之類的。建樹方法 1.將所有關鍵點按 dfs 序排序。2.開乙個棧表示根到當前點的虛樹...
HashMap知識點和紅黑樹知識點
hashmap知識點 初始容量 16 裝載因子 0.75 預設限制擴容數 64 轉換紅黑樹閾值 8 轉換鍊錶閾值 6 當鍊表長度大於8 鍊錶轉為紅黑樹 前提是hashmap容量達到64 當紅黑樹中的元素個數小於6 再轉回鍊錶 前提是根節點或者子節點為空 其實不準確 2.1 大於8,是先考慮table...