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 ...
随机推荐
- thinkphp5数据库导入Excel表格
$data=$order_info; //$data 你要下载谁 就去查谁 // $data= Db::name('order_info') // ->field('consignee,tel, ...
- Hive初识(三)
根据用户的需求创建视图.可以将任何结果集数据保存为一个视图.视图在Hive的用法和SQL视图用法相同.它是一个标准的RDBMS概念.我们可以在视图上执行所有DML操作. 创建一个试图 可以创建一个试图 ...
- python-生成器单线程并发(简单案例)
#!/usr/local/bin/python3 # -*- coding:utf-8 -*- import time # ----------示例---------- def consumer(na ...
- 素数环 南阳acm488(回溯法)
素数环 时间限制:1000 ms | 内存限制:65535 KB 难度:2 描述 有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环. 为了简 ...
- java第二章 变量和运算符
Java 基础应用编程—— 变量和运算符 1.Java程序结构 数据类型:确定要存储在内存中的数据的类型. 变量:是存储数据的基本单元 2.变量的概念 变 ...
- kafka监听类
package com.datad.dream.service; import com.alibaba.fastjson.JSON; import com.datad.dream.dao.KafkaI ...
- es同步mysql同步-logstash
1.下载es https://www.elastic.co/downloads/elasticsearch 修改 config 下elasticsearch.yml ip和端口等配置 2.下载ki ...
- 我所认识的XPath
实例demo 测试demo所需要xml测试数据 <?xml version="1.0" encoding="iso-8859-1"?> <bo ...
- 【APUE】Chapter3 File I/O
这章主要讲了几类unbuffered I/O函数的用法和设计思路. 3.2 File Descriptors fd本质上是非负整数,当我们执行open或create的时候,kernel向进程返回一个f ...
- 虚拟现实-VR-UE4-编译UE4源码
通过Git将UE4源代码获取到本地计算机 切记路径不要有中文 这里面我已经在进行编译了,有部分文件是多余出来的, 第一步就是点击 setup.bat批处理,这个过程回取决与你的网速的快慢,我等了一下午 ...