Luogu 3369 普通平衡樹

2022-03-25 21:52:46 字數 1943 閱讀 6165

插入x數

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

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

查詢排名為x的數

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

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

輸入格式:

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

輸出格式:

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

輸入樣例#1:

10

1 106465

4 11 317721

1 460929

1 644985

1 84185

1 89851

6 81968

1 492737

5 493598

輸出樣例#1:

106465

84185

492737

時空限制:1000ms,128m

1.n的資料範圍: n≤100000 n \leq 100000 n≤100000

2.每個數的資料範圍: [−107,107][-^7, ^7][−10​7​​,10​7​​]

在此鳴謝

01trie擬或成為最大贏家(雖然說空間有點那啥。。。不過時間複雜度是嚴格log的。。。)。。。

(看起來的確很短)

你以為這就完了?不。

剛才在寫某篇博文(部落格裡置頂的那個入門到入殮)的時候突然想起來陣列模擬指標有一種優美的寫法~~~

1 #include 2

const

int n = 100010 * 33;3

int n, x, y, ch[n][2], num[n], tot, root = ++tot;

4#define walk for(int i = 31, rt = root, t ; ~i ; i --)

5#define cond(cd, st) if(x == cd) st;

6void ins(int val, int

c) 12}13

int rak(int val, int ret = 0, int t = 0

) 19

return

ret;20}

21int kth(int k, int ret = 0

) 27

intmain()

38 }

view code

luogu3369 普通平衡樹

題目鏈結 模板只是有幾個容易出錯的地方 第45行容易忘記 第54行裡面的cnt 和siz 容易忘記 第56行是根據id判斷不是val 第60行siz 容易忘記 第64行是siz 1不是siz cnt 第77行和82行等於的情況容易忽略 include include include include ...

普通平衡樹 lg3369

在多次學習splay後,我終於理解並碼出了整份 參考了的部落格 includeusing namespace std define inf 0x3f3f3f3f define ls st p ch 0 define rs st p ch 1 inline intread while ch 0 ch ...

洛谷 3369 模板 普通平衡樹

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