bzoj 1552: [Cerc2007]robotic sort
1552: [Cerc2007]robotic sort
Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 1198 Solved: 457
[Submit][Status][Discuss]
Description

Input
Output
Sample Input
3 4 5 1 6 2
Sample Output
HINT
Source
#include<cstdio>
#include<algorithm>
using namespace std;
#define INF 0x7fffffff
int n;
const int maxn = ;
struct Data{
int a,pos;
bool operator < (const Data & q)const {
if(q.a==a)return pos<q.pos;
else return a<q.a;
}
}l[maxn];
int mn[maxn],size[maxn],root,data[maxn],ch[maxn][],mnpos[maxn];
int rev[maxn],fa[maxn];
inline void pushdown(int x)
{
rev[x]=;
rev[ch[x][]]^=;
rev[ch[x][]]^=;
swap(ch[ch[x][]][],ch[ch[x][]][]);
swap(ch[ch[x][]][],ch[ch[x][]][]);
}
inline void pushup(int x)
{
mn[x]=min(data[x],min(mn[ch[x][]],mn[ch[x][]]));
if(mn[x]==data[x])mnpos[x]=x;
else if(mn[x]==mn[ch[x][]])mnpos[x]=mnpos[ch[x][]];
else mnpos[x]=mnpos[ch[x][]];
size[x]=size[ch[x][]]+size[ch[x][]]+;
}
inline int getkth(int k,int rt)
{
if(rev[rt])pushdown(rt);
if(k==size[ch[rt][]]+)return rt;
if(k<size[ch[rt][]]+)return getkth(k,ch[rt][]);
else getkth(k-size[ch[rt][]]-,ch[rt][]);
} inline int son(int x){
return ch[fa[x]][]==x;
}
void rotate(int x)
{
int y=fa[x],z=fa[y],b=son(x),c=son(y),a=ch[x][!b];
if(z)ch[z][c]=x;else root=x;fa[x]=z;
if(a)fa[a]=y;ch[y][b]=a;
ch[x][!b]=y;fa[y]=x;
pushup(y),pushup(x);
}
void splay(int &x,int i) {
while(fa[x]!=i)
{
int y=fa[x],z=fa[y];
if(z==i){
rotate(x);
}else {
if(rev[z])pushdown(z);if(rev[y])pushdown(y);if(rev[x])pushdown(x);
if(son(x)==son(y)) {
rotate(y),rotate(x);
}
else {
rotate(x);rotate(x);
}
}
}
}
int getmnpos(int l,int r)
{
int ll=getkth(l-,root);
int rr=getkth(r+,root);
splay(ll,);
splay(rr,ll);
return mnpos[ch[rr][]];
}
inline void reverse(int l,int r)
{
int ll=getkth(l-,root),rr=getkth(r+,root),p;
splay(ll,);splay(rr,ll);
p=ch[rr][];rev[p]^=;
swap(ch[p][],ch[p][]);
}
int main() {
scanf("%d",&n);
for(int i=;i<=n+;i++) scanf("%d",&l[i].a),l[i].pos=i;
sort(l+,l+n+);
for(int i=;i<=n+;i++)data[l[i].pos]=i;
for(int i=;i<=n+;i++)mn[i]=INF;
data[]=data[]=data[n+]=INF;root=;
for(int i=;i<=n+;i++) {
fa[i]=i-;
ch[i][]=i+;
}
ch[n+][]=;
for(int i=n+;i>=;i--) {
pushup(i);
}
for(int i=;i<=n;i++)
{
int po=getmnpos(i+,n+);
splay(po,);
printf("%d",size[ch[po][]]);
reverse(i+,size[ch[po][]]+);
if(i!=n)printf(" ");
}
return ;
}
bzoj 1552: [Cerc2007]robotic sort的更多相关文章
- BZOJ 1552: [Cerc2007]robotic sort( splay )
kpm大神说可以用块状链表写...但是我不会...写了个splay.... 先离散化 , 然后splay结点加个min维护最小值 , 就可以了... ( ps BZOJ 3506 题意一样 , 双倍经 ...
- 1552: [Cerc2007]robotic sort
这道题用splay写 先离散化数据保证按题目所述顺序来写 按原序作为键值建树 维护区间最小值去跑 每次将i的位置 和 n的位置x和y找出来后 将x旋转到root y旋转到x的有儿子 这时y的左子树就是 ...
- [BZOJ1552][Cerc2007]robotic sort
[BZOJ1552][Cerc2007]robotic sort 试题描述 输入 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N个用空格隔开的正整数 ...
- 【BZOJ1552】[Cerc2007]robotic sort Splay
[BZOJ1552][Cerc2007]robotic sort Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N ...
- 【bzoj1552/3506】[Cerc2007]robotic sort splay翻转,区间最值
[bzoj1552/3506][Cerc2007]robotic sort Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000. ...
- [Cerc2007]robotic sort
splay区间反转练手题 #include <iostream> #include <cstdio> #include <algorithm> using name ...
- 洛谷 P4402 BZOJ1552 / 3506 [Cerc2007]robotic sort 机械排序
FHQ_Treap 太神辣 蒟蒻初学FHQ_Treap,于是来到了这道略显板子的题目 因为Treap既满足BST的性质,又满足Heap的性质,所以,对于这道题目,我们可以将以往随机出的额外权值转化为每 ...
- BZOJ 1552/1506 [Cerc2007]robotic sort
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=1552 [分析] 这题哇!又有翻转操作...每次要输出第几个?是吧... 所以又要用Spla ...
- 【BZOJ】1552/3506 [Cerc2007]robotic sort
[算法]splay [题解] splay维护序列,用权值(离散化)作为编号.每次找第i小的话直接找对应编号splay即可. 但是这样splay没有下传翻转标记?直接暴力找到路径然后从根到改结点push ...
随机推荐
- 《零基础入门学习Python》【第一版】视频课后答案第001讲
测试题答案: 0. Python 是什么类型的语言? Python是脚本语言 脚本语言(Scripting language)是电脑编程语言,因此也能让开发者藉以编写出让电脑听命行事的程序.以简单的方 ...
- python3爬取”理财大视野”中的股票,并分别写入txt、excel和mysql
需求:爬取“理财大视野”网站的排名.代码.名称.市净率.市盈率等信息,并分别写入txt.excel和mysql 环境:python3.6.5 网站:http://www.dashiyetouzi.co ...
- Django之模型---ORM 单表操作
以上一随笔中创建的book表为例讲解单表操作 添加表记录 方式一 # create方法的返回值book_obj就是插入book表中的python葵花宝典这本书籍纪录对象 book_obj=Book.o ...
- leetcode-21-knapsack
322. Coin Change Write a function to compute the fewest number of coins that you need to make up tha ...
- Tomcat Bug记录
1.问题:org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-IN ...
- oracle如何保证读一致性 第二弹
Oracle之数据库一致性读的原理 在Oracle数据库中,undo主要有三大作用:提供一致性读(Consistent Read).回滚事务(Rollback Transaction)以及实例恢复(I ...
- gpg: signing failed: secret key not available
1 使用png签名tag时报错“ jb@39:~/11$ git tag -s gpg -m "gpg"gpg: directory `/home/jb/.gnupg' creat ...
- tarjan - SPFA - Luogu 3387【模板】缩点
[模板]缩点 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只计算一次 ...
- 以http server为例简要分析netty3实现
概要 最近看了点netty3实现.从webbit项目作为口子.webbit项目是一个基于netty3做的http与websocket server.后面还会继续看下netty4,netty4有很多改进 ...
- Django中间件、Auth认证
中间件 一:什么是中间件 是介于request与response处理之间的一道处理过程 二:中间件的作用 如果你想修改请求,例如被传送到view中的HttpRequest对象. 或者你想修改view返 ...