Splay樹簡單操作

2022-05-07 19:24:08 字數 3976 閱讀 9045

前幾天剛剛自學了一下splay,發現思路真簡單實現起來好麻煩

先貼一下頭檔案

# include 

# include

# include

# include

# define ll long long

# define rg register//卡常

# define il inline//再卡常

# define un unsigned

# define mem(a, b) memset(a, b, sizeof(a))

# define min(a, b) ((a) < (b)) ? (a) : (b)

# define max(a, b) ((a) > (b)) ? (a) : (b)

using

namespace

std;

il void rot(rg tree *x, rg int i)

il void splay(rg tree *x, rg tree *f)

}

il void insert(rg int num)

else

while(2333)

if(num < x -> val)

x = x -> ch[0];

}else

if(num > x -> val)

x = x -> ch[1];

}splay(x, null);

}

il void find(rg int num)
il void findmx(rg tree *x, rg tree *f, rg int i)
il void delete(rg int num)

}

il int size(rg tree *x)

il int rank(rg int num)

il int pos(rg int num)

}return x -> val;

}

以上就是基本操作

il int size(rg tree *x)

il void updata(rg tree *x)

il void rot(rg tree *x, rg int i)

il void splay(rg tree *x, rg tree *f)

updata(x); //大佬說要寫在這裡

}

簡單的栗子

鏈結bzoj3224

請讀者思考2分鐘

。 。

。 。

。 。

。 。

。 。

。 。

。 。

。 。

。 。

。 。

。 。

。 。

。 。

。 。

。 。

。 好了直接看**

**調了好久qaq

# include 

# include

# include

# include

# define ll long long

# define rg register

# define il inline

# define un unsigned

# define mem(a, b) memset(a, b, sizeof(a))

# define min(a, b) ((a) < (b)) ? (a) : (b)

# define max(a, b) ((a) > (b)) ? (a) : (b)

using

namespace

std;

il int get()

struct tree

} *root;

il int size(rg tree *x)

il void updata(rg tree *x)

il void rot(rg tree *x, rg int i)

il void splay(rg tree *x, rg tree *f)

updata(x);

}il void insert(rg int num)

else

if(num == x -> val) x -> tot++, root = x;

else

while(2333)

if(num < x -> val)

x = x -> ch[0];

}else

if(num > x -> val)

x = x -> ch[1];

}else

splay(x, null);

}il void find(rg int num)

il void findmx(rg tree *x, rg tree *f, rg int i)

il void delete(rg int num)

}il int rank(rg int num)

il int pos(rg int num)

}return x -> val;

}int main()

if(opt == 6)

}return

0;}

又乙個栗子

鏈結bzoj3223

再思考兩分鐘

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, ,

, 看**

# include 

# include

# include

# include

# define ll long long

# define rg register

# define il inline

# define un unsigned

# define mem(a, b) memset(a, b, sizeof(a))

# define min(a, b) ((a) < (b)) ? (a) : (b)

# define max(a, b) ((a) > (b)) ? (a) : (b)

using

namespace

std;

il int get()

struct tree

il void pushdown()

} *root;

int n;

il int size(rg tree *x)

il void updata(rg tree *x)

il void dfs(rg tree *x)

il void rot(rg tree *x, rg int i)

il void splay(rg tree *x, rg tree *f)

}updata(x);

}il tree *build(rg int l, rg int r, rg tree *f)

il void find(rg int num, rg tree *f)

}splay(x, f);

}il void turn()

int main()

解釋或**錯誤還請大佬指出,本蒟蒻一定會改

簡單的機械臂設計(Splay樹)

時間限制 2 sec 記憶體限制 32 mb 題目描述 在東秦綜合樓的深處,有實驗室檢查各種材料的機械和電學效能。你受蔡老闆所託為乙個在實驗室中處理樣品的機械人編寫軟體。在傳送帶上有材料樣本,樣品有不同的高度,可能給下乙個處理單元帶來麻煩。為了消除這些麻煩,我們需要把樣品按高度排序到公升序。重新排序...

splay區間操作

splaytree 區間操作 區間修改 題目 題目大意 給出一組數字,區間整體增加乙個值,區間查詢和 思路 很經典的區間操作的題目,因此思路也不用自己想,都是各路以例題的形式給出 之前用線段數寫的,用了 1938ms 今天用 splay 寫,耗時 2875.說一下splay 操作的幾個要點 其實核心...

Splay基本操作

splay基本操作 using namespace std struct splayt maxn int newp void rotate int x void splay s int x,int destnation rotate x 無論共不共線都要旋x if destnation 0 root...