Tyvj 1728 普通平衡樹

2022-05-21 06:59:27 字數 1922 閱讀 2661

您需要寫一種資料結構(可參考題目標題),來維護一些數,其中需要提供以下操作: 

1. 插入x數 

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

3. 查詢x數的排名(若有多個相同的數,因輸出最小的排名) 

4. 查詢排名為x的數 

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

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

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

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

10 1 106465 

4 1 

1 317721 

1 460929 

1 644985 

1 84185 

1 89851 

6 81968 

1 492737 

5 493598

106465 

84185 

492737

1.n的資料範圍:n<=100000

2.每個數的資料範圍:[-1e7,1e7]

第二道splay模板題,調了我乙個晚上,我再也不想看這題一眼,題解請看:

**:

#include#include

#include

#include

#include

const

int maxn=100100

;using

namespace

std;

int tr[maxn][2

],cnt[maxn],key[maxn],size[maxn],pr[maxn];

int roof=0,tot=0

;intn;

void

cl()

int getx(int

x)

void clar(intx)

void update(int

now)

void rotate(int x,int

kind)

void splay(int x,int

goal)

else

else}}

if(goal==0) roof=x;}

void insert(int

k)

int now=roof,fa=0;

while(1

) fa=now;

now=tr[now][ k >key[now]];

if(now==0

) }}

int find(int

zhi)

ans+=cnt[now];

now=tr[now][1

]; }

}} int findx(int

rk) }}

int getpre(intx)

int getnext(intx)

void delete(int

x)

if(!tr[roof][0]&&!tr[roof][1])

if(!tr[roof][0

])

if(!tr[roof][1

])

int oldrf=roof;

int lf=getpre(roof);

splay(lf,0);

pr[tr[oldrf][

1]]=roof;

tr[roof][

1]=tr[oldrf][1

]; clar(oldrf);

update(roof);

return;}

intmain()

if(id==6

) }

}

Tyvj 1728 普通平衡樹

hysbz 3224 tyvj 1728 普通平衡樹 time limit 10000ms memory limit 131072kb 64bit io format lld llu submit status use mathjax to parse formulas description 您需...

Tyvj 1728 普通平衡樹

time limit 10 sec memory limit 128 mb submit 13242 solved 5675 submit status discuss 您需要寫一種資料結構 可參考題目標題 來維護一些數,其中需要提供以下操作 1.插入x數 2.刪除x數 若有多個相同的數,因只刪除乙...

3224 Tyvj 1728 普通平衡樹

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