BZOJ3224 普通平衡樹 splay

2021-07-15 01:25:40 字數 1383 閱讀 2253

題目在這裡

題意:讓你實現一棵樹,實現

插入,刪除,

查詢x數的排名,

查詢排名為x的數

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

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

這道題最開始我用treap過了,今天打了乙個splay題解。

treap題解

#include #include #include using namespace std;

namespace splay

void up(const int &u)

//x become the father of y

void rot(const int &x, const int& d)

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

up(y); up(x);

} //tag become x's father

void splay(const int &x, const int &tag) else

} if (!tag) root = x; }

void ins(int &x, const int &val, const int &p) else }

void insert(const int &val)

int find(int x, const int &val)

//delete root

void del()

if( !ch[root][0] )else }

void delete(const int& val)

int kth(int u, int k)

int rank(int u, int val)

int pred(int u, int val)

int succ(int u, int val)

}int main()

return 0;

}

xgtao用vector過了,我就納悶怎麼沒超時。。。。。我沒有他的**,不過這裡有乙份vector的**。

#include #include #include using namespace std;

vectors;

int main()

}

比較一下三種方法效率:

memory                      time

treap :   3664 

kb364 

mssplay:    3636 

kb696 

msvector

:      1684 kb1692 ms

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