劃分樹解決的是快速求區間中第k大值的問題,演算法的主要思想是基於線段樹和快排的劃分方法,可以實現在logn時間內求出任意區間的第k大值。下面這份**是基於hud4251的乙份模板。
**如下:
#include
#include
#include
#include
using
namespace
std;
const
int maxn=100000+1000;
int tree[20][maxn]; ///表示每層每個位置的值
int sorted[maxn]; ///已經排好序的數
int toleft[20][maxn]; ///toleft[p][i]表示第p層從1-i有多少個數分入左邊
void build(int l,int r,int dep)
build(l,mid,dep+1);
build(mid+1,r,dep+1);
}///查詢區間第k大值,[l,r]是大區間,[l,r]是查詢的小區間
int query(int l,int r,int l,int r,int dep,int k)
else
}int main()
sort(sorted+1,sorted+n+1);
build(1,n,0);
for(int i=0;i<3;i++)
int s,t,k;
while(m--)
}return
0;}
HDU 4251 主席樹(劃分樹是正解)
題意 查詢區間中位數 思路 模板題,相當於區間第k大的數,主席樹可以水過,但劃分樹是正解。但還沒搞明白劃分樹,先上模板 1 include 2 include 3 include 4 include 5 include 6 include 7 include 8 include 9 include ...
劃分樹模板
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...