BZOJ 3224 普通平衡樹

2021-07-25 01:26:29 字數 1635 閱讀 6112

description

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

1. 插入x數

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

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

4. 查詢排名為x的數

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

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

【題目分析】

splay模板題目。

【**】

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define maxn 100005

#define inf (0x3f3f3f3f)

int read()

while (ch>='0'&&ch<='9')

return x*f;

}int ch[maxn][2],fa[maxn],num[maxn],siz[maxn],tim[maxn],rt=0,tot=0;

int ansp,ansn;

void update(int k)

void rot(int x,int &k)

fa[x]=z;

fa[y]=x;

fa[ch[x][r]]=y;

ch[y][l]=ch[x][r];

ch[x][r]=y;

update(y); update(x);

}void splay(int x,int &k)

rot(x,k);

}}void ins(int &k,int x,int lst)

siz[k]++;

if (x==num[k]) tim[k]++;

else

if (x0],x,k);

else ins(ch[k][1],x,k);

}void del(int &k,int x)

else

if (!ch[k][0]) fa[ch[k][1]]=fa[k];

else fa[ch[k][0]]=fa[k];

k=ch[k][0]+ch[k][1];

return ;

}else}}

siz[k]--;

if (num[k]1],x);

else del(ch[k][0],x);

}int rank(int k,int x)

int find(int k,int x)

void pre(int k,int x)

return pre(ch[k][0],x);

}void nxt(int k,int x)

return nxt(ch[k][1],x);

}int main()

}}

bzoj3224普通平衡樹

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

BZOJ3224 普通平衡樹

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

BZOJ3224 普通平衡樹

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