本題為題目 普通平衡樹 的可持久化加強版。
資料已經經過強化
插入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:
複製
100 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:
複製
912103
資料範圍:
對於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了。。
#includeusingnamespace
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 模板 可持久化平衡樹
可持久化平衡樹 可持久化 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 的二元組,表示經過這條邊上操作,可以達到下乙個狀態。考慮使用權值樹狀陣列維護操作。只需要實...
洛谷P3835 模板 可持久化平衡樹
本題為題目 普通平衡樹 的可持久化加強版。資料已經經過強化 插入x數 刪除x數 若有多個相同的數,因只刪除乙個,如果沒有請忽略該操作 查詢x數的排名 排名定義為比當前數小的數的個數 1。若有多個相同的數,因輸出最小的排名 查詢排名為x的數 求x的前驅 前驅定義為小於x,且最大的數,如不存在輸出 21...