BZOJ 3224 SBT 普通平衡樹

2022-04-27 10:54:11 字數 1279 閱讀 1478

複習了一下sbt的模板,但是bzoj不知道為什麼註冊不了,所以就沒交,測了樣例能過!

#include 

#include

using

namespace

std;

#define lc ch[0]

#define rc ch[1]

const

int maxn=500000;

const

int inf=0x3f3f3f3f;

struct node

}sbt[maxn+10],*nill=new node,*root=nill,*tot=sbt;

int getint()

void init()

//更新子樹大小

inline

void update(node* r)

node* newnode()

void rotate(node* r,bool f)

void mt(node* &r,bool f)//利用左右對稱,帶上引數f同時減去不必要的檢查

else

if(r->ch[f]->ch[!f]->sz>r->ch[!f]->sz)//左右》右,先旋左兒子,再旋根

else

return;

mt(r->ch[f],f);

mt(r,f);

}void insert(node* &r,int v)

r->sz++;

bool k=v>r->v;

insert(r->ch[k],v);

mt(r,k);

}int del(node* &r,int x)

else ret=del(r->ch[x>=r->v],x);

return ret;

}int sel(int val)//val的排位

else

}return ret;

}int rk(int x)//排第x的值

}return inf;

}//查詢前驅(0)後繼(1)

int query(int v,bool f)

if(v==p->v)

p=p->ch[f];

else p=p->ch[v>p->v];

}return ret;

}int main()

}return

0;}

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,且最小的...