splay区间反转练手题

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=;
int n,fa[N],ch[N][],val[N],siz[N],tot,pos[N],rt;
struct Node{
int id,v;
}a[N];
bool cmp1(Node x,Node y) {return x.v==y.v?x.id<y.id:x.v<y.v;}
bool cmp2(Node x,Node y) {return x.id<y.id;}
bool rev[N];
inline void pushup(int x) {siz[x]=siz[ch[x][]]+siz[ch[x][]]+;}
void pushdown(int x) {
if(rev[x]) {
swap(ch[x][],ch[x][]);
rev[ch[x][]]^=,rev[ch[x][]]^=;
rev[x]=;
}
}
int build(int f,int l,int r) {
if(l>r) return ;
int now=++tot,mid=l+r>>;
val[now]=a[mid].v;fa[now]=f;
pos[a[mid].v]=now;
ch[now][]=build(now,l,mid-);
ch[now][]=build(now,mid+,r);
pushup(now);
return now;
}
inline void rotate(int x) {
int f=fa[x],ff=fa[f];
pushdown(f);pushdown(x);
bool tag=ch[fa[x]][]==x;
ch[f][tag]=ch[x][tag^];
fa[ch[f][tag]]=f;
fa[f]=x;
ch[x][tag^]=f;
fa[x]=ff;
if(ff) ch[ff][f==ch[ff][]]=x;
pushup(f);pushup(x);
}
inline void splay(int x,int tar){
for(int f;(f=fa[x])!=tar;rotate(x)) if(fa[f]!=tar)rotate((x==ch[fa[x]][])==(f==ch[fa[f]][])?f:x);
if(!tar) rt=x;
}
int nxt(){
pushdown(rt);
int x=ch[rt][];
while(pushdown(x),ch[x][]) x=ch[x][];
return x;
}
int main() {
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i+].v),a[i+].id=i+;
a[].v=;a[n+].v=n+;//a[1].id=1,a[n+2].id=n+2;
sort(a+,a++n,cmp1);
for(int i=;i<=n+;i++) a[i].v=i-;
sort(a+,a++n,cmp2);
rt=build(,,n+);
for(int i=;i<=n;i++) {
int x=pos[i];splay(x,);
printf("%d ",siz[ch[x][]]);
x=nxt();
int y=pos[i-];
splay(y,);
splay(x,y);
rev[ch[x][]]^=;
}
}

robotic sort

[Cerc2007]robotic sort的更多相关文章

  1. [BZOJ1552][Cerc2007]robotic sort

    [BZOJ1552][Cerc2007]robotic sort 试题描述 输入 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N个用空格隔开的正整数 ...

  2. BZOJ 1552: [Cerc2007]robotic sort( splay )

    kpm大神说可以用块状链表写...但是我不会...写了个splay.... 先离散化 , 然后splay结点加个min维护最小值 , 就可以了... ( ps BZOJ 3506 题意一样 , 双倍经 ...

  3. 【BZOJ1552】[Cerc2007]robotic sort Splay

    [BZOJ1552][Cerc2007]robotic sort Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N ...

  4. bzoj 1552: [Cerc2007]robotic sort

    1552: [Cerc2007]robotic sort Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 1198  Solved: 457[Submit] ...

  5. 【bzoj1552/3506】[Cerc2007]robotic sort splay翻转,区间最值

    [bzoj1552/3506][Cerc2007]robotic sort Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000. ...

  6. 洛谷 P4402 BZOJ1552 / 3506 [Cerc2007]robotic sort 机械排序

    FHQ_Treap 太神辣 蒟蒻初学FHQ_Treap,于是来到了这道略显板子的题目 因为Treap既满足BST的性质,又满足Heap的性质,所以,对于这道题目,我们可以将以往随机出的额外权值转化为每 ...

  7. 【bzoj1552】[Cerc2007]robotic sort

    题目描述 输入 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号. 输出 输出共一行,N个用空格隔开的 ...

  8. [BZOJ1552] [Cerc2007] robotic sort (splay)

    Description Input 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000.第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号. Output ...

  9. BZOJ1552[Cerc2007]robotic sort&BZOJ3506[Cqoi2014]排序机械臂——非旋转treap

    题目描述 输入 输入共两行,第一行为一个整数N,N表示物品的个数,1<=N<=100000. 第二行为N个用空格隔开的正整数,表示N个物品最初排列的编号. 输出 输出共一行,N个用空格隔开 ...

随机推荐

  1. [C++基础]goto的用法

    原文: http://blog.csdn.net/shimazhuge/article/details/8448773 ---------------------------------------- ...

  2. cppunit 的使用

    原文: http://blog.csdn.net/abcdef0966/article/details/5699248

  3. springmvc mybatis 分页插件 pagehelper

    springmvc mybatis 分页插件 pagehelper 下载地址:pagehelper 4.2.1 , jsqlparser 0.9.5 https://github.com/pagehe ...

  4. loosejar原理简要分析

    loosejar这个小工具能够动态分析出应用中有每一个jar包的实际使用情况,详情请參阅<通过loosejar清理应用中冗余的jar包>基本原理是利用instrumentation的特性用 ...

  5. crm使用FetchXml分组聚合查询

    /* 创建者:菜刀居士的博客  * 创建日期:2014年07月09号  */ namespace Net.CRM.FetchXml {     using System;     using Micr ...

  6. 文字过长 用 ... 表示 CSS实现单行、多行文本溢出显示省略号

    单行文本溢出显示省略号 max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;   多行文本 ...

  7. jquery-layer弹出框

    样式1: 代码: 前台jsp: $("#add_table").bind("click",function(){ layer.open({ type: 2, t ...

  8. Tool:ProcessOn

    ylbtech-Tool:ProcessOn ProcessOn是一个面向垂直专业领域的作图工具和社交网络,成立于2011年6月并于2012年启动.ProcessOn将全球的专家顾问.咨询机构.BPM ...

  9. PCB Genesis加邮票孔(邮票孔增加方向判断--左右上下)实现算法

    之前没解决的问题,当时一下卡在用户界面选择邮票孔增加的方向(上下左右) 与邮票孔实际方位之前的逻辑与非判断上卡壳了,导致一下没进展下去. 回头看原来如此简单 ,将此点记录一下. 1.垂直线定义:80- ...

  10. Beauty Contest(凸包求最远点)

    http://poj.org/problem?id=2187 题意:求凸包上最远点距离的平方 思路:开始用旋转卡壳求的最远点,WA,改了好久..后来又改成枚举凸包上的点..AC了.. #include ...