k-th number
多次詢問乙個靜態區間裡的第k大數。怎麼搞?
暴力?(還是別想了)
多次構建樹狀陣列?(和暴力有啥區別)
於是乙個叫做劃分樹的東西就登場了。(據說還有個叫歸併樹的,速度慢一點,就不學了)
劃分樹詳解
——**
1 #include 2 #include 3view code#define n 10000145
using
namespace
std;67
intn, m;
8int c[n];//
排序後陣列
9int num[20][n], val[20
][n];
10//
一共有20層,每一層元素排放,0層是原陣列
11//
num[i] 表示 i 前面有多少個孩子進入左孩子
1213 inline void build(int l, int r, int
k)14
30else val[k + 1][rc++] = val[k][i];//
到右孩子 31}
32 build(l, mid, k + 1
);33 build(mid + 1, r, k + 1
);34}35
36 inline int query(int l, int r, int k, int ql, int qr, int
qk)3750}
5152
intmain()
5365}66
return0;
67 }
當然還有其他方法,不過**量都比較大。
可以看看這篇blog
劃分樹模板
border 0 width 330 height 86 src upd 3.17 複習了一些劃分樹 做了一下簡單的複習筆記 傳到雲上了qaq 恩 打了半小時 恩 213的把瀏覽器關掉了 恩 心好累 不打劃分樹的詳細解釋了 粘三份 好了 第乙份是t的 蒟蒻捂臉 的我 沒學劃分樹的最好看一下 對理解後...
劃分樹模板
源自 kuangbin的acm模板 新 include include include include include include include using namespace std typedef long long ll const int maxn 100010 const int m...
劃分樹模板 模板題 hdu4251
劃分樹解決的是快速求區間中第k大值的問題,演算法的主要思想是基於線段樹和快排的劃分方法,可以實現在logn時間內求出任意區間的第k大值。下面這份 是基於hud4251的乙份模板。如下 include include include include using namespace std const ...