非旋Treap——维护数列
https://www.luogu.org/problemnew/show/P3391
知识点:1.split:1.拆数值 2.拆排名
2.merge
3.截取l - r这个区间,先截l - 1出来,再截 r - l +1(是r-l+1而不是r)
code:
#include <bits/stdc++.h>
#define M 500002
using namespace std;
int n,m,root;
int tot = ;
int lazy[M];
int head[M],cnt;
struct edge
{
int to;
int nxt;
}e[M * ];
void add(int x,int y)
{
e[++cnt].nxt = head[x];
e[cnt].to = y;
head[x] = cnt;
}
int siz[M];
int ch[M][],val[M],rd[M];
void updata(int x)
{
siz[x] = siz[ch[x][]] + siz[ch[x][]] + ;
}
int newnode(int x)
{
val[++tot] = x;
rd[tot] = rand();
siz[tot] = ;
return tot;
}
void down(int x)
{
swap(ch[x][],ch[x][]);
if(ch[x][]) lazy[ch[x][]] ^= ;
if(ch[x][]) lazy[ch[x][]] ^= ;
lazy[x] = ;
}
void split(int now,int k,int &x,int &y)
{
if(!now)
{
x = y = ;
return;
}
else
{
if(lazy[now])down(now);
if(siz[ch[now][]] < k)
{
x = now;
split(ch[now][],k - siz[ch[now][]] - ,ch[now][],y);
}
else
{
y = now;
split(ch[now][],k,x,ch[now][]);
}
updata(now);
}
}
int merge(int A,int B)
{
if(!A || !B)return A + B;
if(rd[A] < rd[B])
{
if(lazy[A])down(A);
ch[A][] = merge(ch[A][],B);
updata(A);
return A;
}
else
{
if(lazy[B])down(B);
ch[B][] = merge(A,ch[B][]);
updata(B);
return B;
}
}
void work(int x,int y)
{
int a,b,c,d;
split(root,x - ,a,b);
split(b,y - x + ,b,c);
lazy[b] ^= ;
root = merge(a,merge(b,c));
}
void insert(int t)
{
root = merge(root,newnode(t));
}
void print(int i)
{
if(!i) return;
if(lazy[i]) down(i);
print(ch[i][]);
printf("%d ",val[i]);
print(ch[i][]);
}
int main()
{
srand();
scanf("%d%d",&n,&m);
for(int i = ;i <= n;i++)insert(i);
int x,y;
while(m--)
{
scanf("%d%d",&x,&y);
work(x,y);
}
print(root);
return ;
}
非旋Treap——维护数列的更多相关文章
- 2018.08.06 bzoj1500: [NOI2005]维修数列(非旋treap)
传送门 平衡树好题. 我仍然是用的fhqtreap,感觉速度还行. 维护也比线段树splay什么的写起来简单. %%%非旋treap大法好. 代码: #include<bits/stdc++.h ...
- 2018.07.24 loj#107. 维护全序集(非旋treap)
传送门 就是普通平衡树,可以拿来练非旋treap" role="presentation" style="position: relative;"&g ...
- 非旋Treap总结 : 快过Splay 好用过传统Treap
非旋$Treap$ 其高级名字叫$Fhq\ Treap$,既然叫$Treap$,它一定满足了$Treap$的性质(虽然可能来看这篇的人一定知道$Treap$,但我还是多说几句:$Fhp\ Treap$ ...
- [模板] 平衡树: Splay, 非旋Treap, 替罪羊树
简介 二叉搜索树, 可以维护一个集合/序列, 同时维护节点的 \(size\), 因此可以支持 insert(v), delete(v), kth(p,k), rank(v)等操作. 另外, prev ...
- 非旋 treap 结构体数组版(无指针)详解,有图有真相
非旋 $treap$ (FHQ treap)的简单入门 前置技能 建议在掌握普通 treap 以及 左偏堆(也就是可并堆)食用本blog 原理 以随机数维护平衡,使树高期望为logn级别, FHQ ...
- 平衡树简单教程及模板(splay, 替罪羊树, 非旋treap)
原文链接https://www.cnblogs.com/zhouzhendong/p/Balanced-Binary-Tree.html 注意是简单教程,不是入门教程. splay 1. 旋转: 假设 ...
- 2827: 千山鸟飞绝 非旋treap
国际惯例的题面:看起来很不可做的样子,我们先来整理一下题意吧.就是,维护每个点曾经拥有过的最大的两个属性值,支持把点的位置移动.我们用map对每个位置进行离散化,对每个位置建立一个平衡树.为了方便分离 ...
- 2018.07.06 BZOJ 1588: HNOI2002营业额统计(非旋treap)
1588: [HNOI2002]营业额统计 Time Limit: 5 Sec Memory Limit: 162 MB Description 营业额统计 Tiger最近被公司升任为营业部经理,他上 ...
- 非旋Treap及其可持久化
平衡树这种东西,我只会splay.splay比较好理解,并且好打,操作方便. 我以前学过SBT,但并不是很理解,所以就忘了怎么打了. 许多用平衡树的问题其实可以用线段树来解决,我们真正打平衡树的时候一 ...
随机推荐
- LDAP 使用记录
LDAP 命令记录 工作中用到了 LDAP,做一个简单记录. 概念性的东西不做阐述,只是记录常用命令,以便将来回顾. 想多做了解可以参考这个系列文章: https://blog.csdn.net/li ...
- 《Python测试开发技术栈—巴哥职场进化记》—软件测试工程师“兵器库”
上文<Python测试开发技术栈-巴哥职场进化记>-初来乍到,请多关照 我们介绍了巴哥入职后见到了自己的导师华哥,第一次参加团队站会,认识了团队中的开发小哥哥和产品小姐姐以及吃到了公司的加 ...
- Spring的第一个程序
目录 一.Spring概述 1. Spring是什么? 2. IOC控制反转 二.Spring的第一个程序 1. 创建Maven项目 2. 加入maven依赖pom.xml 3. 定义接口和实体类 4 ...
- C#LeetCode刷题之#824-山羊拉丁文(Goat Latin)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3971 访问. 给定一个由空格分割单词的句子 S.每个单词只包含大 ...
- C#LeetCode刷题之#661-图片平滑器( Image Smoother)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3730 访问. 包含整数的二维矩阵 M 表示一个图片的灰度.你需要 ...
- jquary常见问题总结
如何调用本地json 1. 调用 <script src="solution.json?cb=readData"></script> 2. json 修改 ...
- Python 为什么要在 18 年前引入布尔类型?且与 C、C++ 和 Java 都不同?
花下猫语:在上一篇<Python 为什么能支持任意的真值判断? >文章中,我们分析了 Python 在真值判断时的底层实现,可以看出 Python 在对待布尔值时,采用了比较宽泛的态度.官 ...
- HDFS的数据流读写数据 (面试开发重点)
1 HDFS写数据流程 1.1 剖析文件写入 HDFS写数据流程,如图所示 1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是 ...
- Tugnsten Fabric-MPLS-三层转发
1.网络拓扑图如下: 2.场景:虚机1.1.1.3 ping 虚机3.3.3.3(两个虚机加入到虚拟路由器里面了,所以可以互通) 3.查看虚机1.1.1.3所对应的VRF: 4.其中41为mpls标签 ...
- 认证授权:学习OAuth协议
1.什么是OAuth协议? OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.同时,任何第三方都可以使用OAuth认证服务,任何服务提供商都可以实现自身的OAuth认证服务,因而OA ...