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

2022-05-02 12:33:11 字數 2261 閱讀 1038

本題為題目 普通平衡樹 的可持久化加強版。

資料已經經過強化

插入x數

刪除x數(若有多個相同的數,因只刪除乙個,如果沒有請忽略該操作)

查詢x數的排名(排名定義為比當前數小的數的個數+1。若有多個相同的數,因輸出最小的排名)

查詢排名為x的數

求x的前驅(前驅定義為小於x,且最大的數,如不存在輸出-2147483647)

求x的後繼(後繼定義為大於x,且最小的數,如不存在輸出2147483647)

和原本平衡樹不同的一點是,每一次的任何操作都是基於某乙個歷史版本,同時生成乙個新的版本。(操作3, 4, 5, 6即保持原版本無變化)

每個版本的編號即為操作的序號(版本0即為初始狀態,空樹)

輸入格式:

第一行包含乙個正整數n,表示操作的總數。

接下來每行包含三個正整數,第 ii 行記為 v_i, opt_i, x_ivi​,opti​,xi​。

v_ivi​表示基於的過去版本號( 0 \leq v_i < i0≤vi​輸出格式:

每行包含乙個正整數,依次為各個3,4,5,6操作所對應的答案

輸入樣例#1: 複製

10

0 1 9

1 1 3

1 1 10

2 4 2

3 3 9

3 1 2

6 4 1

6 2 9

8 6 3

4 5 8

輸出樣例#1: 複製

912

103

資料範圍:

對於10%的資料滿足: 1 \leq n \leq 101≤n≤10

對於30%的資料滿足: 1 \leq n \leq 2\cdot ^21≤n≤2⋅102

對於50%的資料滿足: 1 \leq n \leq 3\cdot ^31≤n≤3⋅103

對於80%的資料滿足: 1 \leq n \leq ^51≤n≤105

對於90%的資料滿足: 1 \leq n \leq 2\cdot ^51≤n≤2⋅105

對於100%的資料滿足: 1 \leq n \leq 5\cdot ^51≤n≤5⋅105 , -^9 \leq x_i \leq ^9−109≤xi​≤109

經實測,正常常數的可持久化平衡樹均可通過,請各位放心

樣例說明:

共10次操作,11個版本,各版本的狀況依次是:

[9][9]

[3, 9][3,9]

[9, 10][9,10]

[3, 9][3,9]

[9, 10][9,10]

[2, 9, 10][2,9,10]

[2, 9, 10][2,9,10]

[2, 10][2,10]

[2, 10][2,10]

[3, 9][3,9]

也是沒誰了

資料壓根就沒有5.6的21***的情況

而且不知道為啥我的樣例沒過就a了。。

#includeusing

namespace

std;

#define ls tree[k].ch[0]

#define rs tree[k].ch[1]

const

int maxn=1e6+10,inf=1e7;

inline

char

nc()

inline

intread()

while(c>='

0'&&c<='9')

return x*f;

}struct

node

tree[maxn];

int x,y,z,tot=0

,root[maxn];

int new_node(int

val)

void update(int k)

void split(int now,int k,int &x,int &y)

if(tree[now].v<=k) x=now,split(tree[now].ch[1],k,tree[now].ch[1

],y);

else y=now,split(tree[now].ch[0],k,x,tree[now].ch[0

]); update(now);

}int merge(int x,int

y)

else

}int kth(int k,int x)//

查詢排名

intmain()

return0;

}

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

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

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

可持久化平衡樹 可持久化 treap 1.插入 x 2.刪除 x 3.查詢 x 的排名 4.查詢排名為 x 的數 5.求 x 的前驅 6.求 x 的後繼 每次操作都基於某一歷史版本,同時生成乙個新的版本 include include include define maxn 500010 using...

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

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