【CQOI2014】排序机械臂
Time Limit:20000MS Memory Limit:565536K Case Time Limit:2000MS
Description
为了把工厂中 高低不等的物品按从低到高排好序,工程师发明了一种排序机械臂。它遵循一个简单的排序规则,第一次操作找到最低的物品位置P1,并把从左起第1个至第P1个之间的物品反序;第二次找到第二低的物品的位置P2,并把左起第二个至第P2个之间的物品反序……最终所有的物品都会被排好序。 上图给出一个示例,第一次操作前,最低物品在位置4,于是把第1至第4个物品反序;第二次操作前,第二低的物品在位置6,于是把第2至第6的物品反序…… 你的任务是编写一个程序,确定操作序列,即每次操作前第i低的物品所在的位置Pi,以便机械臂工作。需要注意的是,如果有高度相同的物品,必须保证排序后他们的相对位置关系与初始时相同。
Input
第一行包含一个正整数n,表示需要排序的物品数量。 第二行包含n和空格分隔的整数ai,表示每个物品的高度。
Output
输出一行包含n个空格分隔的整数Pi。
Sample Input
样例输入1: 6 3 4 5 1 6 2
样例输入2 4 3 3 2 1 Sample Output
样例输出1: 4 6 4 5 6 6
样例输出2: 4 2 4 4 Hint
对于30%的数据,1<=n<=1000 对于100%的数据,1<=n<=100000,1<=ai<=2*10^9
splay,两个值得注意的地方。 1.询问一次删除最小的元素,反序即处理开头到某个位置,splay过后直接给左儿子打标记即可 2.编号已定,每次该找的节点编号可以进行预处理,splay上不用再带min进行冗余操作,对比如下(加min和不加min)
新闻热点
疑难解答