[luogu3391] 【模板】文艺平衡树(fhq-treap反转区间)
解题关键:无旋treap模板。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define maxn 500001
using namespace std;
typedef long long ll;
int size[maxn],ch[maxn][],rnd[maxn],val[maxn],rev[maxn];
int ncnt,x,y,z,rt,n,m; inline void pushup(int x){
size[x]=+size[ch[x][]]+size[ch[x][]];
} inline void pushdown(int rt){
if(rev[rt]){
swap(ch[rt][],ch[rt][]);
if(ch[rt][]) rev[ch[rt][]]^=;
if(ch[rt][]) rev[ch[rt][]]^=;
rev[rt]=;
} } inline int new_node(int x){
size[++ncnt]=;
val[ncnt]=x;
rnd[ncnt]=rand();
return ncnt;
}
//核心
int merge(int A,int B){
if(!A||!B) return A+B;
if(rnd[A]<rnd[B]){pushdown(A);ch[A][]=merge(ch[A][],B);pushup(A);return A;}
else {pushdown(B);ch[B][]=merge(A,ch[B][]);pushup(B);return B;}
}
//权值分裂
/*
void split(int now,int k,int &x,int &y){
if(!now) x=y=0;
else{
pushdown(now);
if(val[now]<=k) x=now,split(ch[now][1],k,ch[now][1],y);
else y=now,split(ch[now][0],k,x,ch[now][0]);
pushup(now);
}
}
*/
//排名分裂 void split(int now,int k,int &x,int &y){
if(!now) x=y=;
else{
pushdown(now);
if(k<=size[ch[now][]]){y=now;split(ch[now][],k,x,ch[now][]);}
else{x=now;split(ch[now][],k-size[ch[now][]]-,ch[now][],y);}
pushup(now);
}
} void insert(int &k,int a){
split(k,a,x,y);
k=merge(merge(x,new_node(a)),y);
} void reverse(int &k,int l,int r){
split(k,l-,x,y);
split(y,r-l+,y,z);
rev[y]^=;
k=merge(x,merge(y,z));
} void print(int &k){
if(!k) return;
pushdown(k);
print(ch[k][]);
if(val[k]>=&&val[k]<=n) printf("%d ",val[k]);
print(ch[k][]);
} int main(){
srand(time());
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) insert(rt,i);
for(int i=,l,r;i<=m;i++){
scanf("%d%d",&l,&r);
reverse(rt,l,r);
}
print(rt);
return ;
}
[luogu3391] 【模板】文艺平衡树(fhq-treap反转区间)的更多相关文章
- P3391 【模板】文艺平衡树FHQ treap
P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...
- 洛谷.3369.[模板]普通平衡树(fhq Treap)
题目链接 第一次(2017.12.24): #include<cstdio> #include<cctype> #include<algorithm> //#def ...
- 2021.12.08 平衡树——FHQ Treap
2021.12.08 平衡树--FHQ Treap http://www.yhzq-blog.cc/fhqtreapzongjie/ https://www.cnblogs.com/zwfymqz/p ...
- luoguP3391[模板]文艺平衡树(Splay) 题解
链接一下题目:luoguP3391[模板]文艺平衡树(Splay) 平衡树解析 这里的Splay维护的显然不再是权值排序 现在按照的是序列中的编号排序(不过在这道题目里面就是权值诶...) 那么,继续 ...
- Luogu P3835 【模板】可持久化平衡树(fhq Treap)
P3835 [模板]可持久化平衡树 题意 题目背景 本题为题目普通平衡树的可持久化加强版. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作(对于各个以往的历史版本 ...
- bzoj3223 Tyvj 1729 文艺平衡树(Splay Tree+区间翻转)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 2202 Solved: 1226[Submit][Sta ...
- 【模板】文艺平衡树(Splay) 区间翻转 BZOJ 3223
您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 N,M<= ...
- 洛谷.3835.[模板]可持久化平衡树(fhq treap)
题目链接 对每次Merge(),Split()时产生的节点都复制一份(其实和主席树一样).时间空间复杂度都为O(qlogq).(应该更大些 因为rand()?内存真的爆炸..) 对于无修改的操作实际上 ...
- [luogu3391][bzoj3223]文艺平衡树【splay】
题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 分析 ...
随机推荐
- Python 安装 pip package
Python的 package 站点提供的msi安装越来越少了,如今大多是.whl或.tar.gz格式.对某些用windows的小白(比如,我)来说,对.tar.gz闻所未闻,也纠结了很长时间.whl ...
- 前端之JavaScript 02
一.函数 // 最基础的函数定义 function f1() { console.log('hello world!'); } f1(); // hello world! // 带参数的函数 func ...
- [转]MFC 调用 printf 输出
摘自:http://blog.csdn.net/miyunhong/article/details/6704121 #include <io.h> #include <fcntl.h ...
- HDU - 6231:K-th Number (不错的二分)
Alice are given an array A[1..N]A[1..N] with NN numbers. Now Alice want to build an array BB by a pa ...
- 核PCA投影平面公式推导
样本方差推导 样本方差公式\[S = \frac{1}{n-1}\sum_{i=1}^n(x_i-\mu_i)^2\] 扩展开来得到\[S = \frac{1}{n-1}[(X-\frac{1}{n} ...
- WCF 配置文件
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.S ...
- LeetCode Partition to K Equal Sum Subsets
原题链接在这里:https://leetcode.com/problems/partition-to-k-equal-sum-subsets/description/ 题目: Given an arr ...
- nginx学习资源
在了解nginx的时候 看到的一些资源: https://www.cnblogs.com/EdwinChan/p/8350984.html http://tengine.taobao.org/book ...
- Goclipse on Eclipse
Goclipse插件安装地址 https://goclipse.github.io/releases gocode.godef都可以通过Download快速安装 但guru容易失败:package g ...
- ALTERA DDRII IP核使用
提到DDRII,大家应该都不陌生,DDRII SDRAM是第二代双倍速率同步动态RAM.今天小编给大家介绍一下QUARTUS II 下调用DDRII软核. 新建QUARTUSII工程之后,在tool下 ...