非旋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,但并不是很理解,所以就忘了怎么打了. 许多用平衡树的问题其实可以用线段树来解决,我们真正打平衡树的时候一 ...
随机推荐
- 前端面试 vue 部分 (5)——VUE组件之间通信的方式有哪些
VUE组件之间通信的方式有哪些(SSS) 常见使用场景可以分为三类: 父子通信: null 父向子传递数据是通过 props ,子向父是通过 $emit / $on $emit / $bus Vuex ...
- 你可以 CRUD,但你不是 CRUD 程序员!
什么是务实 务实程序员他们总是在面临问题时,透过问题看到本质,从具体的场景出发,从大局着想,了解整个问题的来龙去脉,他们会对自己的行为负责,在项目面临问题时,他们不会撒手不管或者任由风险一步步扩大直至 ...
- 某大型企业ospf面试题分析(含路由策略和路由过滤,及双点双向重发布)
面试问题背景 本面试题来自国内最大通信技术公司之一,央企,有很多金融网项目. 了解行业的同学,一定知道事哪个企业. 上面试问题(取自百哥收集整理的面试总结大全,关注百哥CSDN或知乎,不定期分享名企面 ...
- C#LeetCode刷题之#9-回文数(Palindrome Number)
问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3840 访问. 判断一个整数是否是回文数.回文数是指正序(从左向右 ...
- hge引擎示例教程cmake项目
hge引擎的示例代码在vs2017不能很好的运行,需要调不少东西,所以我将其重新整理成cmake的项目. 所有示例均在vs2017 msvc 下测试可以正常运行. 由于缺少libhgehelp.a所以 ...
- Mac 从睡眠恢复后没有声音的问题
重启能解决,不想重启,因为不想重置当前工作状态 换个办法是: 杀掉coreaudiod进程,然后系统会把他自动拉起,然后就ok了.
- windows下RocketMQ的安装部署
一.预备环境 1.系统 Windows 2. 环境 JDK1.8.Maven.Git 二. RocketMQ部署 1.下载 1.1地址:http://rocketmq.apache.org/relea ...
- I帧B帧P帧
转载自:http://blog.csdn.net/abcjennifer/article/details/6577934 视频压缩中,每帧代表一幅静止的图像.而在实际压缩时,会采取各种算法减少数据的容 ...
- 修改Ceph 监视器地址
原文链接:https://blog.csdn.net/lzw06061139/article/details/51953900 获取monmap转储当前Ceph集群的monmap到/tmp/monma ...
- paramiko 模块 ---- python2.7
模拟远程执行命令: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import paramiko #设置日志记录 paramiko ...