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輸出樣例#1: 複製3 4 5 1 6 2
4 6 4 5 6 6n<=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個元素,你的任務是在每次...