洛谷P3834 可持久化線段樹 主席樹 模板

2022-05-12 11:14:50 字數 855 閱讀 3360

題目:

無法忍受了,我要寫主席樹!

解決區間第 k 大查詢問題,可以用主席樹,像字首和一樣建立 n 棵字首區間的權值線段樹;

然後 n 棵線段樹可以共用一些節點;

線段樹的 sum 可以相減,利用這個查詢即可;

什麼嘛,主席樹也沒我想得那麼難(蠻簡單的)!

**如下:

#include#include

#include

#include

using

namespace

std;

intconst maxn=2e5+5

;int n,m,q,t[maxn],ls[maxn<<5],rs[maxn<<5],sum[maxn<<5

],cnt,a[maxn],b[maxn];

//注意陣列範圍,每次新增log(m)個點

int build(int l,int

r)

return

rt;}

int update(int pre,int l,int r,int

x)

return

rt;}

int query(int u,int v,int l,int r,int

k)int

main()

sort(b+1,b+n+1

); m=unique(b+1,b+n+1)-b-1

; t[

0]=build(1

,m);

for(int i=1;i<=n;i++)

for(int i=1,l,r,x;i<=q;i++)

return0;

}

可持久化線段樹模板 解釋(洛谷 P3834)

模板鏈結 可持久化線段樹是一種可持久化結構,需要知道的前導知識有 線段樹 權值線段樹 離散化 線段樹的動態開點。說實話,當蒻苟我做了那麼多 的線段樹後發現,可持久化線段樹 僅限模板 還是很好寫的。什麼叫可持久化?可以想象,有乙個線段樹,他除了可以進行普通的查詢修改操作,還可以記錄歷史版本,即,我們可...

洛谷 P3834 可持久化線段樹 2(主席樹)

因為太菜了,所以也不知道這題的演算法到底應該叫做什麼,看hzw部落格中把這題歸到主席樹了,那我也歸到主席樹里吧。其實我連主席樹定義都不知道 include using namespace std const int n 2e5 5 int n,q,m,x,y,t,cnt int a n b n ll...

P3834 可持久化線段樹(主席樹)入門

include using namespace std define ll long long define mem a,b memset a,b,sizeof a define inf 0x3f3f3f3f define dbg printf this is a input n define fi...