luogu3369 普通平衡樹

2022-04-10 05:56:52 字數 1211 閱讀 6783

題目鏈結

模板只是有幾個容易出錯的地方

第45行容易忘記

第54行裡面的cnt--和siz--容易忘記

第56行是根據id判斷不是val

第60行siz--容易忘記

第64行是siz+1不是siz+cnt

第77行和82行等於的情況容易忽略

#include#include#include#include#define ls tr[cur].ch[0]

#define rs tr[cur].ch[1]

using namespace std;

typedef long long ll;

const int n = 100000 + 100,inf = 1e7 + 100;

ll read()

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

return x * f;

}struct node tr[n];

void up(int cur)

void rotate(int &cur,int f)

int tot;

void insert(int &cur,int val)

tr[cur].siz++;//!!

if(tr[cur].val == val)

int d = val > tr[cur].val;

insert(tr[cur].ch[d],val);

if(tr[tr[cur].ch[d]].id < tr[cur].id) rotate(cur,d);

}void del(int &cur,int val)

if(!ls || !rs)

int d = tr[rs].id < tr[ls].id;

rotate(cur,d);

del(cur,val);

}else tr[cur].siz--,del(tr[cur].ch[val > tr[cur].val],val);

}int rank(int cur,int val)

int kth(int cur,int now)

}int pred(int cur,int val)

int nex(int cur,int val)

int main()

return 0;

}

記憶或會消失,但我的心會記著承諾。

Luogu 3369 普通平衡樹

插入x數 刪除x數 若有多個相同的數,因只刪除乙個 查詢x數的排名 排名定義為比當前數小的數的個數 1。若有多個相同的數,因輸出最小的排名 查詢排名為x的數 求x的前驅 前驅定義為小於x,且最大的數 求x的後繼 後繼定義為大於x,且最小的數 輸入格式 第一行為n,表示操作的個數,下面n行每行有兩個數...

普通平衡樹 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的後繼 後...