洛谷 P3835 模板 可持久化平衡樹

2021-10-23 22:06:10 字數 1194 閱讀 6004

// 可持久化平衡樹(可持久化 treap)

// 1.插入 x

// 2.刪除 x

// 3.查詢 x 的排名

// 4.查詢排名為 x 的數

// 5.求 x 的前驅

// 6.求 x 的後繼

// 每次操作都基於某一歷史版本,同時生成乙個新的版本

#include

#include

#include

#define maxn 500010

using

namespace std;

intread()

while

(c<

'0'||c>

'9');do

while

(c>=

'0'&&c<=

'9')

;return f*x;

}int rt[maxn]

,sz[maxn<<5]

,x,y,z,tot,val[maxn<<5]

,dat[maxn<<5]

,ch[maxn<<5]

[2];

intnewnode

(int x)

void

pushup

(int x)

intclone

(int k)

void

split

(int cur,

int k,

int&x,

int&y)

cur=

clone

(cur);if

(val[cur]

<=k)

else

pushup

(cur);}

intmerge

(int x,

int y)

else

}int

kth(

int cur,

int k)}}

intmain()

if(k==2)

if(k==3)

if(k==4)

printf

("%d\n"

,val[

kth(rt[i]

,a)]);

if(k==5)

if(k==6)

}return0;

}

洛谷P3835 模板 可持久化平衡樹

本題為題目 普通平衡樹 的可持久化加強版。資料已經經過強化 插入x數 刪除x數 若有多個相同的數,因只刪除乙個,如果沒有請忽略該操作 查詢x數的排名 排名定義為比當前數小的數的個數 1。若有多個相同的數,因輸出最小的排名 查詢排名為x的數 求x的前驅 前驅定義為小於x,且最大的數,如不存在輸出 21...

洛谷 P3835 模板 可持久化平衡樹

題目傳送門 洛谷p3835。題意簡述 題面說的很清楚了。題解 考慮建立一棵每個節點都表示乙個版本的樹。以初始版本 0 為根。對於第 i 個操作,從 v i 向 i 連一條邊,而邊權則是 opt i 和 x i 的二元組,表示經過這條邊上操作,可以達到下乙個狀態。考慮使用權值樹狀陣列維護操作。只需要實...

洛谷P3835 模板 可持久化平衡樹

本題為題目 普通平衡樹 的可持久化加強版。資料已經經過強化 插入x數 刪除x數 若有多個相同的數,因只刪除乙個,如果沒有請忽略該操作 查詢x數的排名 排名定義為比當前數小的數的個數 1。若有多個相同的數,因輸出最小的排名 查詢排名為x的數 求x的前驅 前驅定義為小於x,且最大的數,如不存在輸出 21...