BZOJ3506 Cqoi2014 排序機械臂

2022-03-29 16:21:43 字數 2073 閱讀 4986

bzoj3506: [cqoi2014]排序機械臂

額,$bzoj$上沒有題面。。。

本蒟蒻表示沒錢氪金。。。

這裡附上洛谷的題面:

洛谷p3165 [cqoi2014]排序機械臂

為了把工廠中高低不等的物品按從低到高排好序,工程師發明了一種排序機械臂。

它遵循乙個簡單的排序規則,第一次操作找到高度最低的物品的位置 $p_1$​,並把左起第乙個物品至 $p_1$​間的物品 (即區間 $[1,p_1]$間的物品) 反序;第二次找到第二低的物品的位置 $p_2$​,並把左起第二個至 $p_2$​間的物品 (即區間 $[2,p_2]$間的物品) 反序……最終所有的物品都會被排好序。

上圖給出有六個物品的示例,第一次操作前,高度最低的物品在位置 $4$ ,於是把第一至第四的物品反序;第二次操作前,第二低的物品在位罝六,於是把第二至六的物品反序……

你的任務便是編寫乙個程式,確定乙個操作序列,即每次操作前第$ i$ 低的物品所在位置$ p_i$,以便機械臂工作。

需要注意的是,如果有高度相同的物品,必須保證排序後它們的相對位置關係與初始時相同。

輸入格式:

第一行包含正整數n,表示需要排序的物品數星。

第二行包含n個空格分隔的整數$p_i$,表示每個物品的高度。

輸出格式:

輸出一行包含n個空格分隔的整數pi。

輸入樣例#1: 複製

6

3 4 5 1 6 2

輸出樣例#1: 複製

4 6 4 5 6 6
n<=100000

pi<=10^7

看到區間翻轉——區間神器$splay$!

但是!高度是無序的,而$splay$是有序的,怎麼辦呢?

我們可以用結構體存高度與 下標,然後排序。

於是高度就可以丟一邊了。。。

具體看**中的$splay::reverse$ 。

注意:頭尾設兩個哨兵節點。

$splay$每次都要$pushdown$一次(巨坑)!

附**:

#include#include#include#define maxn 100010

#define max 999999999

using namespace std;

int n,size=1,root=0;

struct nodeb[maxn];

namespace splaya[maxn];

inline void clean(int rt)

inline void pushup(int rt)

inline void pushdown(int rt)

inline void turn(int rt,int k)

void splay(int rt,int ancestry)

else}}

if(ancestry==0)root=rt;

}inline int newnode(int x)

int buildtree(int l,int r)

int kth(int rt,int k)

else if(k<=a[y].s)rt=y;

else return rt;}}

inline void reverse(int i)

}inline int read()

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

return date*w;

}bool cmp(const node &x,const node &y)

void init()

b[0].x=-max;b[0].id=1;

b[n+1].x=max;b[n+1].id=n+1;

sort(b+1,b+n+1,cmp);

root=splay::buildtree(0,n+1);

for(int i=1;i<=n-1;i++)splay::reverse(i);

printf("%d\n",n);

}int main()

bzoj1257 CQOI 餘數之和

題目 time limit 5 sec memory limit 162 mb submit 2383 solved 1105 submit status discuss 給出正整數n和k,計算j n,k k mod 1 k mod 2 k mod 3 k mod n的值,其中k mod i表示k除...

BZOJ1818 Cqoi2010 內部白點

給定平面上的一些黑點,其它位置都是白點,乙個白點如果上下左右都有黑點就會變成黑點,求最終會有多少個黑點 就是求交點個數 離散化後,取出所有線段,然後沿任意乙個軸朝著乙個方向掃,然後把平行於另乙個軸的線段用端點記錄,掃到一端就在樹狀陣列裡 1,另一端 1,樹狀陣列求個區間和貢獻答案即可 const m...

bzoj3295 CQOI2011 動態逆序對

time limit 10 sec memory limit 128 mb submit 3122 solved 986 submit status discuss 對於序列a,它的逆序對數定義為滿足i aj 的數對 i,j 的個數。給1到n的乙個排列,按照某種順序依次刪除m個元素,你的任務是在每次...