前幾天剛剛自學了一下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...