luogu P3391 【模板】文艺平衡树(Splay) 非旋转treap
Code:
#include<bits/stdc++.h>
using namespace std;
void setIO(string s)
{
string in=s+".in";
string out=s+".out";
freopen(in.c_str(),"r",stdin);
freopen(out.c_str(),"w",stdout);
}
namespace fhqtreap
{
#define maxn 300000
#define lson ls[x]
#define rson rs[x]
int n,m,root;
int rev[maxn],val[maxn],key[maxn],rs[maxn],ls[maxn],siz[maxn];
void pushup(int x)
{
siz[x]=siz[lson]+siz[rson]+1;
}
void mark(int x)
{
if(!x)return;
swap(lson, rson), rev[x] ^= 1;
}
void pushdown(int x)
{
if(!x || !rev[x]) return;
mark(lson), mark(rson), rev[x] = 0;
}
void split(int x, int k, int &l, int &r)
{
if(x)
{
pushdown(x);
if(k<=siz[lson])
{
r = x;
split(lson, k, l, ls[r]);
pushup(r);
}
else
{
l = x;
split(rson, k - siz[lson] - 1, rs[l], r);
pushup(l);
}
}
else l = r = 0;
}
int merge(int x,int y)
{
if(!x || !y) return x + y;
pushdown(x), pushdown(y);
if(key[x] < key[y])
{
ls[y] = merge(x, ls[y]);
pushup(y);
return y;
}
else
{
rs[x] = merge(rs[x], y);
pushup(x);
return x;
}
}
void print(int x)
{
if(!x) return;
pushdown(x);
print(lson), printf("%d ",val[x]), print(rson);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)
{
key[i]=rand(), val[i]=i, siz[i]=1;
root=merge(root, i);
}
for(int x,y,a=0,b=0,c=0,i=1;i<=m;++i)
{
scanf("%d%d",&x,&y); // 反转 [x,y]
a = b = c = 0;
split(root, y, a, c); // [1,y] -> a
split(a, x - 1, a, b); // [1,x-1] -> a
mark(b);
root = merge(merge(a,b),c);
}
print(root);
return 0;
}
};
int main()
{
// setIO("input");
fhqtreap :: main();
return 0;
}
luogu P3391 【模板】文艺平衡树(Splay) 非旋转treap的更多相关文章
- luoguP3391[模板]文艺平衡树(Splay) 题解
链接一下题目:luoguP3391[模板]文艺平衡树(Splay) 平衡树解析 这里的Splay维护的显然不再是权值排序 现在按照的是序列中的编号排序(不过在这道题目里面就是权值诶...) 那么,继续 ...
- [模板] 平衡树: Splay, 非旋Treap, 替罪羊树
简介 二叉搜索树, 可以维护一个集合/序列, 同时维护节点的 \(size\), 因此可以支持 insert(v), delete(v), kth(p,k), rank(v)等操作. 另外, prev ...
- 2018.08.05 bzoj3223: Tyvj 1729 文艺平衡树(非旋treap)
传送门 经典的平衡树问题,之前已经用splay写过一次了,今天我突发奇想,写了一发非旋treap的版本,发现挺好写的(虽然跑不过splay). 代码: #include<bits/stdc++. ...
- 洛谷.3391.[模板]文艺平衡树(Splay)
题目链接 //注意建树 #include<cstdio> #include<algorithm> const int N=1e5+5; //using std::swap; i ...
- 【洛谷P3391】文艺平衡树——Splay学习笔记(二)
题目链接 Splay基础操作 \(Splay\)上的区间翻转 首先,这里的\(Splay\)维护的是一个序列的顺序,每个结点即为序列中的一个数,序列的顺序即为\(Splay\)的中序遍历 那么如何实现 ...
- [Bzoj3223][Tyvj1729] 文艺平衡树(splay/无旋Treap)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3223 平衡树处理区间问题的入门题目,普通平衡树那道题在维护平衡树上是以每个数的值作为维护 ...
- BZOJ - 3223 Tyvj 1729 文艺平衡树 (splay/无旋treap)
题目链接 splay: #include<bits/stdc++.h> using namespace std; typedef long long ll; ,inf=0x3f3f3f3f ...
- 【阶梯报告】洛谷P3391【模板】文艺平衡树 splay
[阶梯报告]洛谷P3391[模板]文艺平衡树 splay 题目链接在这里[链接](https://www.luogu.org/problemnew/show/P3391)最近在学习splay,终于做对 ...
- 平衡树及笛卡尔树讲解(旋转treap,非旋转treap,splay,替罪羊树及可持久化)
在刷了许多道平衡树的题之后,对平衡树有了较为深入的理解,在这里和大家分享一下,希望对大家学习平衡树能有帮助. 平衡树有好多种,比如treap,splay,红黑树,STL中的set.在这里只介绍几种常用 ...
- BZOJ3223文艺平衡树——非旋转treap
此为平衡树系列第二道:文艺平衡树您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...
随机推荐
- 何为DOM对象
<html> <head> <title>DOM对象</title> <link href="/Content/Site.css&quo ...
- Codeforces 789A Anastasia and pebbles( 水 )
链接:传送门 题意:这个人每次都去公园捡石子,她有两个口袋,每个口袋最多装 k 个石子,公园有 n 种石子,每种石子 w[i] 个,询问最少几天能将石子全部捡完 思路:排个序,尽量每天都多装,如果 k ...
- linux 中配置假域名来测试
1.linux中配置假域名 找到hosts文件进行编辑 命令:vim /etc/hosts 配置: #centos(本机IP)192.168.1.179 www.imooc.com(假域名,自己设置) ...
- JavaScript实验一(添加节点,删除节点)
静态html页面: <!DOCTYPE html> <html> <head lang="en"> <meta charset=" ...
- 工具-putty使用
Ubuntu 下安装 OpenSSH Server 是无比轻松的一件事情,需要的命令只有一条 sudo apt-get install openssh-server 启动SSH服务: sudo /et ...
- 机房-动环-江森ODS系统
优势: 标准的BACnet系统平台 开放的集成特性 支持Desktop and Server平台 支持多达100个NxE 支持无线应用,可以手机访问 DCIM---数据中心基础架构管理平台介绍 不同于 ...
- SqlCommand.DeriveParameters failed
错误信息例如以下: SqlCommand.DeriveParameters failed because the SqlCommand.CommandText property value is an ...
- C++数值类型极限值的获取
C/C++中基本类型的数值极限值一般来说都是与详细平台有关的,在程序设计的过程中为了写出与平台无关的程序则必须通过合理科学的方法去获取各种类型的极值,经常使用的获取方法有两种:一种是传统的C语言所採用 ...
- codecombat之KithGard地牢19-37关代码分享
codecombat中国游戏网址:http://www.codecombat.cn/ 全部代码为javascript代码分享 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 19 ...
- LeetCode——Valid Parentheses
Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...