BZOJ 3224 Tyvj 1728 普通平衡樹

2021-07-16 07:16:59 字數 1835 閱讀 7008

都是平衡樹的基本操作

愛splay的spaly

愛treap的terap

我剛學了替罪羊樹來練練。。

插入及子樹的重構看這篇bzoj 1588:[hnoi2002]營業額統計

刪除操作:先找到節點位置,然後如果該點只有乙個兒子,就直接用其兒子替換改點,否則找到其前驅替換該點,然後刪除其前驅

注意如果刪了總樹的根要記得改rt的值

(我個人喜歡刪除後也判斷是否重構,然而有神犇不這樣幹,我也不知我是不是畫蛇添足。。) md

zz一開始if

裡只打了乙個等於狂t+wa半小時

今天bzoj抽了所以就交了tyvj,為了拿資料還創了個小號。。。

事實證明,替罪羊樹只用了

200ms+

的時間而某神犇的treap用了

800ms+

,快的飛起。。 (怒艹神犇**感覺真爽)

為了不跌rp趕緊orzorzorzorzorzorz%%%%%%%

然而想我這樣製杖的錯誤也沒誰了

其他的操作和其他的平衡樹差不多。。就不一一贅述了

#include

#include

#include

#include

#define g getchar()

#define ll long long

#define inf 0x3f3f3f3f

using namespace std;

inline ll read()

inline void out(ll x)

int sz,size[100005],v[100005],fa[100005],t[100005][2],id,top,q[100005],rt,ans,n;

void ins(int &k,int

x,int f)

if(x

<=v[k])ins(t[k][0],x,k);else ins(t[k][1],x,k);

if(size[k]>=2&&max(size[t[k][0]],size[t[k][1]])>size[k]*0.7)id=k;

size[k]=size[t[k][0]]+size[t[k][1]]+1;

}void dfs(int

x)void build(int &k,int l,int r)

void re_build(int

x)void erase(int

x) int son=(t[x][1])?t[x][1]:t[x][0],lorr=t[fa[x]][1]==x;

t[fa[x]][lorr]=son;fa[son]=fa[x];

for(int i=fa[x];i;i=fa[i])

if(rt==x)rt=son;

}//刪除

void ask_rank(int k,int

x,int now)

else

if(v[k]>x)ask_rank(t[k][0],x,now);

else ask_rank(t[k][1],x,now+size[t[k][0]]+1);

}void ask_num(int k,int rnk)

if(rnk<=size[t[k][0]])ask_num(t[k][0],rnk);

else ask_num(t[k][1],rnk-1-size[t[k][0]]);

}void lower(int k,int

x)void higher(int k,int

x)int find(int k,int

x)int main()

}return

0;}

bzoj 3224,tyvj 1728普通平衡樹

原題位址 這道題涵蓋了平衡樹的基本操作。先關注操作三,它指出要輸出最小的排名,因此我們可以將重複的元素存在乙個節點內,實現很簡單。插入操作已講。那麼怎樣刪除呢?首先我們找到被刪的點,如果它是重複的 該元素還剩很多個 那麼就把個數減一即可。否則我們可以採用像堆的方式,將這個元素通過旋轉不斷地下移。問題...

BZOJ 3224 Tyvj 1728 普通平衡樹

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

BZOJ3224 Tyvj1728普通平衡樹

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