Description

有n个物品,每个物品有它的高度a[i],现在我们要采用一种神奇的方法把这n个物品排好序。第x次我们找到第x矮的物品位置p[x],并且把x到p[x]中间的物品翻转。如果有多个一样高度的,位置后的更高。
求所有的p[i]。
n<=10^5

Solution

我们可以模拟题目中的操作。
翻转神马的splay杠杠的。
于是这道题就是一道基础splay序列题。
为了方便查找,我们可以先把所有物品排个序,然后每次把1~i-1翻转,并且把i删除(防止对后面的影响),接着把1~i-1和i+1~n合并。
练一练码力。

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define N 100005
using namespace std;
struct note{int v,w;}a[N];
bool cmp(note x,note y) {return x.v<y.v||x.v==y.v&&x.w<y.w;}
int n,t[N][2],f[N],size[N],rev[N],d[N],ans[N],root;
void updata(int x) {size[x]=size[t[x][0]]+size[t[x][1]]+1;
}
int son(int x) {if (x==t[f[x]][0]) return 0;else return 1;
}
void back(int x) {rev[x]^=1;swap(t[x][0],t[x][1]);
}
void down(int x) {if (rev[x]) {if (t[x][0]) back(t[x][0]);if (t[x][1]) back(t[x][1]);rev[x]=0;}
}
void remove(int x,int y) {if (x==y) return;do {d[++d[0]]=x;x=f[x];} while (x!=y);while (d[0]) down(d[d[0]--]);
}
void rotate(int x) {int y=f[x],z=son(x);f[x]=f[y];if (f[y]) t[f[y]][son(y)]=x;t[y][z]=t[x][1-z];if (t[x][1-z]) f[t[x][1-z]]=y;t[x][1-z]=y;f[y]=x;updata(y);updata(x);
}
void splay(int x,int y) {remove(x,y);while (f[x]!=y) {if (f[f[x]]!=y)if (son(x)==son(f[x])) rotate(f[x]);else rotate(x);rotate(x);}if (!y) root=x;
}
int build(int l,int r,int fa) {if (l>r) return 0;int m=(l+r)/2;f[m]=fa;size[m]=r-l+1;if(l==r)return l;t[m][0]=build(l,m-1,m);t[m][1]=build(m+1,r,m);return m;
}
void find(int x) {down(x);x=t[x][1];while (x) {down(x);if (t[x][0]) x=t[x][0];else break;}splay(x,0);
}
void del(int x) {f[t[x][0]]=f[x];t[f[x]][0]=t[x][0];updata(f[x]);
}
int main() {scanf("%d",&n);fo(i,1,n) scanf("%d",&a[i].v),a[i].w=i;build(1,n+1,0);sort(a+1,a+n+1,cmp);fo(i,1,n) {splay(a[i].w,0);back(t[root][0]);printf("%d",size[t[root][0]]+i);if (i!=n) printf(" ");find(root);del(t[root][0]);}
}

【bzoj3506】【CQOI2014】排序机械臂相关推荐

  1. [bzoj1552][Cerc2007]robotic sort[bzoj3506][Cqoi2014]排序机械臂

    非常垃圾的一道平衡树,结果被日了一天.很难受嗷嗷嗷 首先不得不说网上的题解让我这个本来就不熟悉平衡树的彩笔很难受--并不好理解. 还好Sinogi大佬非常的神,一眼就切掉了,而且用更加美妙的解法. 题 ...

  2. 【BZOJ3506】[CQOI2014] 排序机械臂(Splay)

    点此看题面 大致题意: 给你\(n\)个数.第一次找到最小值所在位置\(P_1\),翻转\([1,P_1]\),第二次找到剩余数中最小值所在位置\(P_2\),翻转\([2,P_2]\),以此类推.求 ...

  3. 【splay】BZOJ 1152 3506:[cqoi2014]排序机械臂

    BZOJ 1152 && 3506:[cqoi2014]排序机械臂 Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,第二行为N个用空格隔开的正整数 ...

  4. P3165 [CQOI2014]排序机械臂

    传送门 就是说要维护一个数据结构资瓷区间反转和查询第\(K\)大,那么splay吧 我们可以把原数组按高度为第一关键字,下标为第二关键字排序,然后直接建出splay 这样的话每次第\(K\)大直接查询 ...

  5. 洛谷3165 CQOI2014 排序机械臂 splay

    题目链接 题意: 给你一个长度为nnn的序列,现在有一种对序列排序的方法:假设当前最小的前iii个已经找到了,我们找到i+1i+1i+1到nnn里面最早出现的最小值,设其出现位置为jjj,我们将区间[ ...

  6. bzoj 1552: [Cerc2007]robotic sort bzoj 3506: [Cqoi2014]排序机械臂(splay区间翻转)

    1552: [Cerc2007]robotic sort Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 1206  Solved: 460 [Submi ...

  7. python机械臂仿真_使用VTK与Python实现机械臂三维模型可视化

    三维可视化系统的建立依赖于三维图形平台, 如 OpenGL.VTK.OGRE.OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成 ...

  8. 机器人抓矸石_基于机器视觉的多机械臂煤矸石分拣机器人系统研究

    工矿自动化 Industryand MineAutomation Vol. 45 No. 9 Sep.2019 第 45 卷第 9 期 2019 年 9 月 文章编号 : 1671 - 251X(20 ...

  9. 简单的机械臂设计(Splay树)

    时间限制: 2 Sec 内存限制: 32 MB 题目描述 在东秦综合楼的深处,有实验室检查各种材料的机械和电学性能.你受蔡老板所托为一个在实验室中处理样品的机器人编写软件.在传送带上有材料样本,样品有 ...

最新文章

  1. Springboot 日志管理模块编写记录
  2. ios 常见性能优化
  3. python中列表和集合_15个例子掌握Python列表,集合和元组
  4. Android社招最全面试题,妈妈再也不用担心我找工作了!
  5. php 字符串 中文位置,怎样查找中文字符的位置呢
  6. JLBH示例1 –为什么应在上下文中对代码进行基准测试
  7. 2019-06-02 15:27:20
  8. 【Kafka】Kafka如何开启SSL 控制台消费与生产 代码消费与生产
  9. 续航超600km新能源汽车扎堆发布,零部件供应商“放血”,这届车展都拼了...
  10. C语言memset学习
  11. MindFusion教程:如何构建Java Swing中的区域图
  12. CQF笔记M1L4随机分析和伊藤引理
  13. 特种作业操作证2021电工作业2021年电气试验考试题库
  14. 【精简操作】Mathtype安装出现错误“53”/未找到.wll文件/选项卡灰色等问题
  15. vue项目中实现价格被横线划掉,折扣价效果
  16. dumb-init:一个Docker容器初始化系统
  17. 衡量风控模型优劣的曲线-PR曲线、ROC曲线、K-S曲线、Lift曲线
  18. Qt::​Alignment 设置对齐方式
  19. 爬虫速成(一):前言
  20. 高考作文做个标题党,有何不好!

热门文章

  1. 光学定位与追踪技术_光学定位交互系统Optical Tracker PST Base, 不看看?
  2. 送给需要剪辑视频的你-----剪辑的软件和录屏的软件,以及格式转换软件,超级好用
  3. Python连接Mysql数据库实现图书借阅系统
  4. 将军百战声名裂 —— 泣血说李陵
  5. 基于java订单管理系统_基于JAVA技术的订单管理系统(DOC毕业设计论文)
  6. 在php模板引擎smarty下输出大括号
  7. bitmap等比例缩小
  8. python+pandas气象数据处理
  9. 零基础入门深度学习(5) - 循环神经网络【转】
  10. eBPF+Ftrace 合璧剑指:no space left on device?