BZOJ3223: Tyvj 1729 文艺平衡树 无旋Treap
一开始光知道pushdown却忘了pushup.........
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<queue>
#define MAXN 100010
using namespace std;
inline int read()
{
int sum=;
char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')
{
sum=(sum<<)+(sum<<)+ch-'';
ch=getchar();
}
return sum;
}
struct Treap
{
struct Node
{
Node *ch[];
int size,v,key;
bool rev;
void pushup()
{
size=ch[]->size+ch[]->size+;
}
}null[MAXN],*root,*q[MAXN];
void swap(Node *&x,Node *&y)
{
Node *temp=x;
x=y;
y=temp;
}
void pushdown(Node *p)
{
if(!p->rev)return;
p->ch[]->rev^=;
p->ch[]->rev^=;
swap(p->ch[],p->ch[]);
p->rev=;
}
int head,tail;
int sz;
Node *build(int l,int r)
{
if(l>r)return null;
int mid=(l+r)>>;
null[mid].ch[]=build(l,mid-);
null[mid].ch[]=build(mid+,r);
null[mid].pushup();
return &null[mid];
}
void bfs()
{
q[]=root;
head=tail=;
while(head<=tail)
{
Node *x=q[head++];
x->v=++sz;
if(x->ch[]!=null)q[++tail]=x->ch[];
if(x->ch[]!=null)q[++tail]=x->ch[];
}
}
void Init(int n)
{
null->ch[]=null->ch[]=null;
for(int i=;i<=n;i++)
null[i].ch[]=null[i].ch[]=null,null[i].size=,null[i].key=i;
root=build(,n);
bfs();
}
Node *Merge(Node *a,Node *b)
{
if(a==null)return b;
if(b==null)return a;
if(a->v<b->v)
{
pushdown(a);
a->ch[]=Merge(a->ch[],b);
a->pushup();
return a;
}
else
{
pushdown(b);
b->ch[]=Merge(a,b->ch[]);
b->pushup();
return b;
}
}
pair<Node*,Node*> split(Node *p,int k)
{
if(p==null)return make_pair(null,null);
pushdown(p);
if(p->ch[]->size>=k)
{
pair<Node*,Node*> y=split(p->ch[],k);
p->ch[]=y.second;
p->pushup();
y.second=p;
return y;
}
pair<Node*,Node*> y=split(p->ch[],k-p->ch[]->size-);
p->ch[]=y.first;
p->pushup();
y.first=p;
return y;
}
void Rev(int l,int r)
{
pair<Node*,Node*> x=split(root,l-);
pair<Node*,Node*> y=split(x.second,r-l+);
y.first->rev^=;
root=Merge(Merge(x.first,y.first),y.second);
}
void Print(Node *p)
{
pushdown(p);
if(p==null)return;
Print(p->ch[]);
printf("%d ",p->key);
Print(p->ch[]);
}
}YY;
int main()
{
int n=read(),m=read();
YY.Init(n);
while(m--)
{
int l=read(),r=read();
YY.Rev(l,r);
}
YY.Print(YY.root);
return ;
}
BZOJ3223: Tyvj 1729 文艺平衡树 无旋Treap的更多相关文章
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- [BZOJ3223]文艺平衡树 无旋Treap
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Description 您需要写一种数据结构(可参考题目标题),来维护一个 ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2202 Solved: 1226[Submit][Sta ...
- 2018.08.05 bzoj3223: Tyvj 1729 文艺平衡树(非旋treap)
传送门 经典的平衡树问题,之前已经用splay写过一次了,今天我突发奇想,写了一发非旋treap的版本,发现挺好写的(虽然跑不过splay). 代码: #include<bits/stdc++. ...
- 【Splay】【块状链表】bzoj3223 Tyvj 1729 文艺平衡树
让蒟蒻见识到了常数大+滥用STL的危害. <法一>很久之前的Splay #include<cstdio> #include<algorithm> using nam ...
- BZOJ3223——Tyvj 1729 文艺平衡树
1.题目大意:维护序列,只有区间翻转这个操作 2.分析:splay的经典操作就是实现区间翻转,就是在splay中有一个标记,表示这个区间被翻转了 然后就是记得各种的操作访问某个点时,记得下传,顺便交换 ...
- bzoj3223: Tyvj 1729 文艺平衡树 splay裸题
splay区间翻转即可 /************************************************************** Problem: 3223 User: walf ...
- 【Splay】bzoj3223 Tyvj 1729 文艺平衡树
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #i ...
随机推荐
- Hive初识(三)
根据用户的需求创建视图.可以将任何结果集数据保存为一个视图.视图在Hive的用法和SQL视图用法相同.它是一个标准的RDBMS概念.我们可以在视图上执行所有DML操作. 创建一个试图 可以创建一个试图 ...
- python3 练习题100例 (二十四)打印完数
完数:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如 6 = 1+2+3. 题目内容: 输入一个正整数n(n<1000),输出1到n之间的所有完数(包括n). 输 ...
- ruby 类库组成
一. 核心类库: 二.标准类库: 文本 base64.rb 处理Base64编码的模块 csv.rb CSV(Comma Separated Values)库 ruby 1.8 特性 ...
- DecimalFormat的用法
DecimalFormat 是 NumberFormat 的一个具体子类,用于格式化十进制数字. DecimalFormat 包含一个模式 和一组符符号含义: 0 一个数字 # 一个数字,不包括 0 ...
- 创龙TMS320C6748开发找不到 tl.dsp.evm6748的问题研究
1. 使用中遇到问题,看了一下帖子说是把tl.dsp.evm6748换成ti.platforms.evm6748可以编译过去.这个包是在XDCtools里面的. js: "D:/ti/ccs ...
- oracle 认识
有一家叫甲骨文的粮店,老板很严谨,为了防止仓库的粮食在买入卖出的时候发生问题,他制订一套流程,首先进出仓库的每一旦粮食都要求有一个编号(SCN),而且出入库之前必须先放到一个平台上(buffer ca ...
- hadoop与mysql数据库的那点事
转眼间已经接触了hadoop两周了,从之前的极力排斥到如今的有点喜欢,刚开始被搭建hadoop开发环境搞得几乎要放弃,如今学会了编写小程序,每天都在成长一点挺好的,好好努力,为自己的装备库再填 ...
- ES5新增数组方法(4):every
检查数组元素的每个元素是否符合条件. // 数组中的元素全部满足指定条件返回true let arr = [1, 3, 5, 7, 9]; console.log(arr.every((value, ...
- Python 常见的错误类型和继承关系
Python所有的错误都是从BaseException类派生 BaseException +-- SystemExit +-- KeyboardInterrupt +-- GeneratorExit ...
- python 网络篇(计算机网络基础)
计算机网络的发展及基础网络概念 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无 ...