[BZOJ3506] [Cqoi2014] 排序机械臂 (splay)
Description
同OJ1552
Input
Output
Sample Input
Sample Output
HINT
Source
Solution
Q:哎不是同一道题吗为什么分两篇博客来写?
A:当然是来骗浏览量了233333333,这里还是会放代码的,当然你左转BZOJ1552的题解也行。
1 #include <bits/stdc++.h> 2 using namespace std; 3 struct spaly 4 { 5 int c[2], fa, siz, rev; 6 }a[100005]; 7 pair<int, int> b[100005]; 8 9 void push_up(int k) 10 { 11 a[k].siz = a[a[k].c[0]].siz + a[a[k].c[1]].siz + 1; 12 } 13 14 void push_down(int k) 15 { 16 if(a[k].rev) 17 { 18 swap(a[k].c[0], a[k].c[1]), a[k].rev = 0; 19 a[a[k].c[0]].rev ^= 1, a[a[k].c[1]].rev ^= 1; 20 } 21 } 22 23 void rotate(int &k, int x) 24 { 25 int y = a[x].fa, z = a[y].fa; 26 int dy = a[y].c[1] == x, dz = a[z].c[1] == y; 27 if(k == y) k = x, a[x].fa = z; 28 else a[z].c[dz] = x, a[x].fa = z; 29 a[y].c[dy] = a[x].c[!dy], a[a[x].c[!dy]].fa = y; 30 a[x].c[!dy] = y, a[y].fa = x; 31 push_up(y); 32 } 33 34 void splay(int &k, int x) 35 { 36 while(k != x) 37 { 38 int y = a[x].fa, z = a[y].fa; 39 push_down(z), push_down(y), push_down(x); 40 if(k != y) 41 if(a[y].c[1] == x ^ a[z].c[1] == y) rotate(k, x); 42 else rotate(k, y); 43 rotate(k, x); 44 } 45 push_up(x); 46 } 47 48 int find(int k, int x) 49 { 50 if(!k) return 0; 51 push_down(k); 52 if(x <= a[a[k].c[0]].siz) return find(a[k].c[0], x); 53 if(x == a[a[k].c[0]].siz + 1) return k; 54 return find(a[k].c[1], x - a[a[k].c[0]].siz - 1); 55 } 56 57 int main() 58 { 59 int n, root, pos; 60 while(~scanf("%d", &n) && n) 61 { 62 for(int i = 1; i <= n; i++) 63 { 64 scanf("%d", &b[i].first); 65 b[i].second = i + 1; 66 } 67 sort(b + 1, b + n + 1); 68 for(int i = 1; i <= n + 2; i++) 69 { 70 a[i].fa = i + 1, a[i].c[0] = i - 1; 71 a[i].siz = i, a[i].c[1] = a[i].rev = 0; 72 } 73 a[n + 2].fa = 0, root = n + 2; 74 for(int i = 1; i <= n; i++) 75 { 76 splay(root, b[i].second); 77 pos = a[a[root].c[0]].siz; 78 printf("%d", pos); 79 if(i != n) printf(" "); 80 splay(root, find(root, i)); 81 splay(a[root].c[1], find(root, pos + 2)); 82 a[a[a[root].c[1]].c[0]].rev ^= 1; 83 } 84 puts(""); 85 } 86 return 0; 87 }
View Code
转载于:https://www.cnblogs.com/CtrlCV/p/5415751.html
[BZOJ3506] [Cqoi2014] 排序机械臂 (splay)相关推荐
- 洛谷3165 CQOI2014 排序机械臂 splay
题目链接 题意: 给你一个长度为nnn的序列,现在有一种对序列排序的方法:假设当前最小的前iii个已经找到了,我们找到i+1i+1i+1到nnn里面最早出现的最小值,设其出现位置为jjj,我们将区间[ ...
- [bzoj1552][Cerc2007]robotic sort[bzoj3506][Cqoi2014]排序机械臂
非常垃圾的一道平衡树,结果被日了一天.很难受嗷嗷嗷 首先不得不说网上的题解让我这个本来就不熟悉平衡树的彩笔很难受--并不好理解. 还好Sinogi大佬非常的神,一眼就切掉了,而且用更加美妙的解法. 题 ...
- 【BZOJ3506】[CQOI2014] 排序机械臂(Splay)
点此看题面 大致题意: 给你\(n\)个数.第一次找到最小值所在位置\(P_1\),翻转\([1,P_1]\),第二次找到剩余数中最小值所在位置\(P_2\),翻转\([2,P_2]\),以此类推.求 ...
- 【splay】BZOJ 1152 3506:[cqoi2014]排序机械臂
BZOJ 1152 && 3506:[cqoi2014]排序机械臂 Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,第二行为N个用空格隔开的正整数 ...
- 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 ...
- P3165 [CQOI2014]排序机械臂
传送门 就是说要维护一个数据结构资瓷区间反转和查询第\(K\)大,那么splay吧 我们可以把原数组按高度为第一关键字,下标为第二关键字排序,然后直接建出splay 这样的话每次第\(K\)大直接查询 ...
- 【bzoj3506】【CQOI2014】排序机械臂
Description 有n个物品,每个物品有它的高度a[i],现在我们要采用一种神奇的方法把这n个物品排好序.第x次我们找到第x矮的物品位置p[x],并且把x到p[x]中间的物品翻转.如果有多个一样 ...
- python机械臂仿真_使用VTK与Python实现机械臂三维模型可视化
三维可视化系统的建立依赖于三维图形平台, 如 OpenGL.VTK.OGRE.OSG等, 传统的方法多采用OpenGL进行底层编程,即对其特有的函数进行定量操作, 需要开发人员熟悉相关函数, 从而造成 ...
- 简单的机械臂设计(Splay树)
时间限制: 2 Sec 内存限制: 32 MB 题目描述 在东秦综合楼的深处,有实验室检查各种材料的机械和电学性能.你受蔡老板所托为一个在实验室中处理样品的机器人编写软件.在传送带上有材料样本,样品有 ...
- 机器人抓矸石_基于机器视觉的多机械臂煤矸石分拣机器人系统研究
工矿自动化 Industryand MineAutomation Vol. 45 No. 9 Sep.2019 第 45 卷第 9 期 2019 年 9 月 文章编号 : 1671 - 251X(20 ...
最新文章
- Excel 2007中创建或删除自定义数字格式
- Win7下程序结束为何没有调用 DLL_PROCESS_DETACH?
- python列表定义和操作_Python 列表的定义及操作
- E-BERT: 电商领域语言模型优化实践
- 应用机器学习(五):支持向量机
- js 程序执行与顺序实现详解
- 拓端tecdat|python使用MongoDB,Seaborn和Matplotlib文本分析和可视化API数据
- 如何打开屏幕坏的手机_手机屏幕碎了怎么开usb?不通过屏幕打开usb调试方法
- IP,路由器工作原理、MAC,交换机工作原理、CSMA\CD、令牌环网
- Flash Builder 4.6桌面项目在Flash Builder 4.7中打开遇到的问题
- si4463 WDS配置参数详解
- 卡耐基的这100句话,畅销85年,改变了很多人
- imageview显示圆形图片
- mysql异地灾备架构_最佳实践 数据库异地灾备
- 在macOS系统电脑上怎么听不到任何耳机声音怎么办?
- 目标检测算法YOLO-V1算法详解
- 理解GCN(二)从拉普拉斯矩阵到Ncut问题
- 扩展activiti 支持任意属性扩展
- 智能社JS学习笔记(二)
- BLDC的三闭环控制
热门文章
- C#WinForm的TextBox 按TAB键让光标按照指定顺序走
- read一个收到RST的socket会返回0?
- BeanUtils组件使用小指南
- jdbc数据库连接池连接
- html弄多个按钮_html - 一个表单中的两个提交按钮
- mysql 防火墙 centos_CentOS 开启防火墙 firewall ,mysql 远程访问
- python3.6下载步骤_python3实现文件下载的方法总结
- 解决fabric编译失败(make: *** [release/linux-amd64/bin/configtxgen] Error 1)
- python dag调度系统开发_深度解析 | 基于DAG的分布式任务调度平台:Maat
- snakeyaml jyaml 哪个好_lol手游哪个英雄可玩性高 英雄联盟手游英雄强度排行