CQOI2014 排序機械臂

2022-05-11 00:45:16 字數 1408 閱讀 8591

一道很水很水的題,splay樹儲存乙個最小值,每次查詢最小值所在的位置,旋轉到根,輸出它在第幾位。然後將它之前的節點打上翻轉標記,維護一下即可。

注意這道題要先排序,因為翻轉操作之後就不知到它原來的位置了。

1

//never forget why you start

2 #include3 #include4 #include5 #include6 #include7 #include8

#define ll(x) bst[x].child[0]

9#define rr(x) bst[x].child[1]

10#define son(x,t) bst[x].child[t]

11#define inf (2147483647)

12using

namespace

std;

13int

root,n,cnt;

14struct

pointa[100005

];17

bool cmp1(const point a,const

point b)

20bool cmp2(const point a,const

point b)

23struct

bstbst[100005

];26

void push_up(int

root)

33void push_down(int

root)41}

42void rotate(int r,int

t)50

void splay(int r,int

goal)

59 fa=bst[r].fa;60}

61if(goal==0)root=r;62}

63int search(int

root)

69int find(int root,int

k)76

void build(int &root,int left,int right,int

fa)85

if(left1

,root);

86if(mid1

,right,root);

87 bst[root].x=a[mid].x;bst[root].size=1;88

push_up(root);89}

90int split(int l,int

r)97

void delet(int

pos)

108int

main()

131return0;

132 }

CQOI2014 排序機械臂

題目鏈結 洛谷 p3165 bzoj 3506 解析 如果用 splay 做,需要先排序,記錄每個點被選中的順序。考慮到 fhq treap 的 heap 性質,直接將結點的 key 值設為每個物品的高度。充分利用小根堆的性質,使每次被選中的結點一定是根結點。當資料單調時,操作總複雜度為 o n 但...

P3165 CQOI2014 排序機械臂

為了把工廠中高低不等的物品按從低到高排好序,工程師發明了一種排序機械臂。它遵循乙個簡單的排序規則,第一次操作找到攝低的物品的位置p1,並把左起第乙個至p1間的物品反序 第二次找到第二低的物品的位置p2,並把左起第二個至p2間的物品反序.最終所有的物品都會被排好序。上圖給出 個示例,第 次操作前,菝低...

P3165 CQOI2014 排序機械臂

題目描述 為了把工廠中高低不等的物品按從低到高排好序,工程師發明了一種排序機械臂。它遵循乙個簡單的排序規則,第一次操作找到高度最低的物品的位置 p 1p 1 並把左起第乙個物品至 p 1p 1 間的物品 即區間 1,p 1 1,p 1 間的物品 反序 第二次找到第二低的物品的位置 p 2p 2 並把...