水题。。。貌似理解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. JQuery学习

    首先要明白一点,JQuery是一个JS的封装库,目的是为了关注点分离,让前端更加侧重于界面显示,而不是各个浏览器不同的差异性,下面是JQuery的一些常用的基本用法 一,JQuery语法 window ...

  2. 杭电1008 Elevator

    #include <stdio.h> #include <stdlib.h> int main() { int n; int i,j; int num[101]; while( ...

  3. 翻译qmake文档(一) qmake指南和概述

    翻译qmake文档 目录 英文文档连接: http://qt-project.org/doc/qt-5/qmake-manual.html http://qt-project.org/doc/qt-5 ...

  4. 后记:Cookie安全大辩论总结

    前天,我发布在博客园上的某知名电商网站的Cookie漏洞引发园友们的热议,学到了很多知识,现在整理一下其中比较激烈的技术讨论.谁对谁错每个人自己心中都有一把称,很多时候都是我无法说服你,你也无法说服我 ...

  5. 让 HTML5 来为你定位

    Geolocation HTML5 的 geolocation 是一个令人兴奋的 API,通过这套 API,Javascript 代码就能够访问到用户的当前位置.当然,访问之前必须得到用户的明确认可, ...

  6. C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  7. DbEntry在Vs2012里的配置

    dbentry官方的版本还不支持vs2012,要再vs2012中使用,必须做下调整 1:新建类库项目,然后添加dbentry 的dll引用. 2:在建好的类库项目中.csproj 新添加了类库项目后, ...

  8. js的原型链和constructor

    转载:http://www.108js.com/article/article1/10201.html?id=1092 请先瞻仰上边的这篇文章. 对象的原型链: box.__proto__.__pro ...

  9. C++ redirect input

    #include<iostream> #include<string> #include<fstream> using namespace std; int mai ...

  10. 关于HTML+CSS设置图片居中的方法

    有的时候我们会遇到这样一个问题,就是当我们按下F12进行使用firebug调试的时候,我们发现图像没有居中,页面底下有横向的滑动条出现,图片没能够居中,默认状态下只是紧靠在页面最左侧,而我们对图像缩小 ...