模板 普通平衡樹(Treap SBT)

2021-08-20 11:30:56 字數 1188 閱讀 1133

插入 xx 數

刪除 xx 數(若有多個相同的數,因只刪除乙個)

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

查詢排名為 xx 的數

求 xx 的前驅(前驅定義為小於 xx ,且最大的數)

求 xx 的後繼(後繼定義為大於 xx ,且最小的數)

輸入輸出格式

第一行為 nn ,表示操作的個數,下面 nn 行每行有兩個數 optopt 和 xx , optopt 表示操作的序號( 1 \leq opt \leq 6 1≤opt≤6 )

對於操作 3,4,5,63,4,5,6 每行輸出乙個數,表示對應答案

treap模版

只要了解旋轉,一切好說

#include 

#include

#include

#include

const

int maxn=1e5+7;

const

int inf=0x3f3f3f3f;

using

namespace

std;

struct nodet[maxn];

int n,op,x,cnt,root;

void updata(int x)

void rttr(int &x)

void rttl(int &x)

void ins(int &x,int k)

if (k<=t[x].data)

else

updata(x);

}int get_rank(int x,int k)

int get_val(int x,int k)

int get_pre(int k)

else x=t[x].l;

}return ans;

}int get_next(int k)

else x=t[x].r;

}return ans;

}void del(int &x,int k)

updata(x);

}else x=0;

return;

}if (kelse del(t[x].r,k);

updata(x);

}int main()

}

模板 普通平衡樹 Treap

題目描述 您需要寫一種資料結構 可參考題目標題 來維護一些數,其中需要提供以下操作 1.插入x數 2.刪除x數 若有多個相同的數,因只刪除乙個 3.查詢x數的排名 排名定義為比當前數小的數的個數 1。若有多個相同的數,因輸出最小的排名 4.查詢排名為x的數 5.求x的前驅 前驅定義為小於x,且最大的...

Splay 普通平衡樹模板

口訣 rotate 先上再下,最後自己 splay 祖父未到旋兩次,三點一線旋父親,三點折線旋自己。delete 沒有兒子就刪光。單個兒子刪自己。兩個兒子找前驅。易錯點 rotate 祖父不在自己做根 delete 自己做根父親為0 kth 先減排名後轉移 by dennyqi 2018 inclu...

普通平衡樹

1.插入數值x。2.刪除數值x 若有多個相同的數,應只刪除乙個 3.查詢數值x的排名 若有多個相同的數,應輸出最小的排名 4.查詢排名為x的數值。5.求數值x的前驅 前驅定義為小於x的最大的數 6.求數值x的後繼 後繼定義為大於x的最小的數 注意 資料保證查詢的結果一定存在。輸入格式 第一行為n,表...