水题。。。貌似理解splay怎么维护数列了。。。

每个点维护一个size,它的位置就是它的size,区间翻转的话可以打标记,find的时候push_down,交换左右子树。

 #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100005
#define lc(x) ch[x][0]
#define rc(x) ch[x][1]
using namespace std;
int cnt;
int k[N];
int size[N];
int lazy[N];
int ch[N][];
int dai[N];int fa[N];
int n,m;int root;
void push_up(int x)
{
size[x]=size[ch[x][]]+size[ch[x][]]+;
return ;
}
void rotate(int p)
{
int q=fa[p],y=fa[q],x=(ch[q][]==p);
ch[q][x]=ch[p][x^];fa[ch[p][x^]]=q;
ch[p][x^]=q;fa[q]=p;fa[p]=y;
if(y)
{
if(q==ch[y][])ch[y][]=p;else ch[y][]=p;
}
push_up(q);push_up(p);
return ;
}
void splay(int x,int pos)
{
for(int y;y=fa[x];rotate(x))
{
if(y==pos)break;
if(fa[y]!=pos)
{
if((ch[fa[y]][]==y&&ch[y][]==x)||(ch[fa[y]][]==y&&ch[y][]==x))rotate(y);
else rotate(x);
}
}
if(!pos)root=x;
}
void push_down(int x)
{
if(lazy[x])
{
lazy[x]=;
lazy[ch[x][]]^=;lazy[ch[x][]]^=;
swap(ch[x][],ch[x][]);
}
}
int find(int k,int rank)
{
push_down(k);
int l=ch[k][];int r=ch[k][];
if(size[l]+==rank)return k;
else if(size[l]>=rank)return find(ch[k][],rank);
else return find(ch[k][],rank-size[l]-);
}
void dfs(int x)
{
push_down(x);
if(ch[x][])dfs(ch[x][]);
if(k[x]!=&&k[x]!=n+)printf("%d ",k[x]);
if(ch[x][])dfs(ch[x][]);
}
int main()
{
scanf("%d%d",&n,&m);
cnt=n+;root=;
for(int i=;i<=n+;i++)
{
ch[i+][]=i+;
fa[i+]=i+;
k[i+]=i;
size[i+]=n+2-i;
}ch[n+][]=;
for(int i=;i<=m;i++)
{
int t1,t2;
scanf("%d%d",&t1,&t2);
int x1=find(root,t1);int x2=find(root,t2+);
splay(x1,);splay(x2,x1);
lazy[ch[x2][]]^=;
}
dfs(root);
return ;
}
/*
5 1
1 4
*/

bzoj 3223 splay模板题3的更多相关文章

  1. bzoj 1588 splay模板题

    用晚自习学了一下splay模板,没想象中那么难,主要是左旋和右旋可以简化到一个函数里边,减少代码长度... #include<iostream> #include<cstdio> ...

  2. bzoj 3224 splay模板题4

    再刷水题我就废了... #include<iostream> #include<cstdio> #include<algorithm> #include<cs ...

  3. bzoj 1208 splay模板题2

    自己yy了找前驱和后继,学了学怎么删除...(反正就是练模板) #include<iostream> #include<cstdio> #include<cstring& ...

  4. 【BZOJ 3196】二逼平衡树 线段树套splay 模板题

    我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...

  5. 【BZOJ 3188】【Coci 2011】Upit Splay模板题

    转啊转终于转出来了,然而我的模板跟陈竞潇学长的模板一模一样,还是太弱啊,第一次用指针. #include<cstdio> #include<cstring> #include& ...

  6. BZOJ 1208 [HNOI2004]宠物收养所 | SPlay模板题

    题目: 洛谷也能评 题解: 记录一下当前树维护是宠物还是人,用Splay维护插入和删除. 对于任何一次询问操作都求一下value的前驱和后继(这里前驱和后继是可以和value相等的),比较哪个差值绝对 ...

  7. BZOJ 3223 Splay区间翻转

    思路: 区间翻转的裸题 终于tm理解splay了-- //By SiriusRen #include <cstdio> #include <cstring> #include ...

  8. BZOJ 1588 平衡树 模板题

    Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int si ...

  9. BZOJ 3224 平衡树模板题

    Treap: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; int n, ...

随机推荐

  1. js的client详解

    clientWidth:可视区宽       说明:样式宽+padding clientHeight:可视区高       说明:样式高+padding elem.clientWidth //获取元素 ...

  2. 定时取数据库的schema,并推送到git服务器

    写了个脚本,定时去数据库取schema,并推送到公司的git里. #daily_schema.py #/usr/bin/env python import os import datetime,tim ...

  3. Centos6 安装 Redis

    先确认gcc和tcl已经安装 sudo yum install gcc-c++ sudo yum install tcl 解压, 编译和安装 .tar.gz /usr/src/ cd /usr/src ...

  4. MySQL数据库集群进行正确配置步骤

    MySQL数据库集群进行正确配置步骤 2010-06-09 10:47 arrowcat 博客园 字号:T | T 我们今天是要和大家一起分享的是对MySQL数据库集群进行正确配置,我前两天在相关网站 ...

  5. SQL2012删除作业失败的处理

    修改msdb数据库中的过程sp_delete_job,如下: USE [msdb] GO /****** Object: StoredProcedure [dbo].[sp_delete_job] S ...

  6. 通过ssh tunnel连接内网ECS和RDS

    通过ssh tunnel连接内网ECS和RDS 这里讲了ssh tunnel的原理.很清晰. 此后又给外网访问内网增加了一种思路.感觉特别棒. 拓宽了思路:

  7. .NET MVC HtmlHepler

    一.HtmlHepler 1.ActionLink() 动态生成 超链接:根据路由规则,生成对应的 html 代码. //1.注册路由信息 routes.MapRoute( name: "D ...

  8. meta标签大全

    meta标签大全 <!--     x-ua-compatible(浏览器兼容模式)     仅对IE8+以效     告诉浏览器以什么版本的IE的兼容模式来显示网页     <meta ...

  9. Bootstrap系列 -- 43. 固定导航条

    很多情况之一,设计师希望导航条固定在浏览器顶部或底部,这种固定式导航条的应用在移动端开发中更为常见.Bootstrap框架提供了两种固定导航条的方式:  .navbar-fixed-top:导航条固定 ...

  10. RHEL每天定时备份Oracle

    步骤: (1)创建脚本文件bak_112.sh,内容如下(自动按当前日期备份数据库): #!/bin/sh export ORACLE_BASE=/u01/app/oracle; ORACLE_HOM ...