知識點 劃分樹

2021-09-25 19:29:24 字數 1456 閱讀 9546

​ 劃分樹,類似線段樹,主要用於求解某個區間的第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...