P3391 【模板】文艺平衡树
模板题 link
Splay 区间翻转,存个代码
旋转时,要注意goal是引用 , 并记得修改 , 有标记的一定记得标记下放 , 还有清空
#include<iostream>
#include<cstdio>
using namespace std;
const int N = 101000;
inline int read()
{
register int x = 0 , f = 0; register char c = getchar();
while(c < '0' || c > '9') f |= c == '-' , c = getchar();
while(c >= '0' && c <= '9') x = (x << 3) + (x << 1) + c - '0' , c = getchar();
return f ? -x : x;
}
#define RQ puts("RQ");
int n , m , sz , root;
int tr[N][2] , val[N] , rev[N] , fa[N] , siz[N];
inline int Newnode() { return ++sz; }
inline void update(int x) { siz[x] = siz[tr[x][0]] + siz[tr[x][1]] + 1; }
inline int witch(int x) { return x == tr[fa[x]][1]; }
inline int rk(int x) { return 1 + siz[tr[x][0]]; }
void rot(int x , int &goal) // 忘记了修改 goal
{
int y = fa[x] , z = fa[y] , k = witch(x) , w = tr[x][!k];
if(y == goal) goal = x; else tr[z][witch(y)] = x;
fa[x] = z; tr[y][k] = w; if(w) fa[w] = y;
tr[x][!k] = y; fa[y] = x;
update(y); update(x);
}
void down(int x)
{
if(!x || !rev[x]) return ; // 没用判断标记
swap(tr[x][0] , tr[x][1]);
if(tr[x][0]) rev[tr[x][0]] ^= 1;
if(tr[x][1]) rev[tr[x][1]] ^= 1;
rev[x] = 0; // 还没有清空
return ;
}
void Splay(int x , int &goal) // 引用
{
while(x != goal)
{
if(fa[x] != goal) rot(witch(x) == witch(fa[x]) ? fa[x] : x , goal);
rot(x , goal);
}
return ;
}
void build(int &k , int l , int r , int f)
{
if(l > r) return ; int mid = (l + r) >> 1;
if(!k) k = Newnode(); siz[k] = 1; fa[k] = f; val[k] = mid;
build(tr[k][0] , l , mid - 1 , k);
build(tr[k][1] , mid + 1 , r , k);
update(k); return ;
}
int kth(int k) // 求的是第k大的是谁 , 而不是k的排名
{
int p = root;
while(down(p) , rk(p) != k)
{
if(rk(p) < k) k -= rk(p) , p = tr[p][1];
else p = tr[p][0];
}
Splay(p , root);
return p;
}
void reverse(int l , int r)
{
int x = kth(l) , y = kth(r);
Splay(x , root); Splay(y , tr[x][1]);
rev[tr[y][0]] ^= 1; return ;
}
void dfs(int x)
{
if(!x) return ; down(x);
dfs(tr[x][0]);
if(val[x] >= 1 && val[x] <= n) printf("%d " , val[x]);
dfs(tr[x][1]);
return ;
}
int main()
{
n = read(); m = read();
build(root , 0 , n+1 , 0);
for(int i = 1 ; i <= m ; ++i)
{
int l = read() , r = read();
reverse(l , r + 2);
}
dfs(root);
return 0;
}
P3391 【模板】文艺平衡树的更多相关文章
- luoguP3391[模板]文艺平衡树(Splay) 题解
链接一下题目:luoguP3391[模板]文艺平衡树(Splay) 平衡树解析 这里的Splay维护的显然不再是权值排序 现在按照的是序列中的编号排序(不过在这道题目里面就是权值诶...) 那么,继续 ...
- 洛谷.3391.[模板]文艺平衡树(Splay)
题目链接 //注意建树 #include<cstdio> #include<algorithm> const int N=1e5+5; //using std::swap; i ...
- 【洛谷P3391】文艺平衡树——Splay学习笔记(二)
题目链接 Splay基础操作 \(Splay\)上的区间翻转 首先,这里的\(Splay\)维护的是一个序列的顺序,每个结点即为序列中的一个数,序列的顺序即为\(Splay\)的中序遍历 那么如何实现 ...
- 洛谷 P3391 【模板】文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
- P3391 【模板】文艺平衡树FHQ treap
P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...
- P3391 【模板】文艺平衡树(Splay)新板子
P3391 [模板]文艺平衡树(Splay) 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转 ...
- 【阶梯报告】洛谷P3391【模板】文艺平衡树 splay
[阶梯报告]洛谷P3391[模板]文艺平衡树 splay 题目链接在这里[链接](https://www.luogu.org/problemnew/show/P3391)最近在学习splay,终于做对 ...
- [洛谷P3391] 文艺平衡树 (Splay模板)
初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...
- 洛谷 P3391 【模板】文艺平衡树
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构,来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4 ...
- 洛谷 P3391【模板】文艺平衡树(Splay)
题目背景 这是一道经典的Splay模板题--文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...
随机推荐
- Qt编写的项目作品1-自定义控件大全
一.功能特点 超过160个精美控件,涵盖了各种仪表盘.进度条.进度球.指南针.曲线图.标尺.温度计.导航条.导航栏,flatui.高亮按钮.滑动选择器.农历等.远超qwt集成的控件数量. 每个类都可以 ...
- 使用expect实现自动交互,shell命令行自动输入
背景 有需求,在允许命令或者脚本跳出交互行,需要进行内容输入,但需要人手动输入,不是很方便,此时可以通过expect来实现自动互动交互. expect是一个自动交互功能的工具,可以满足代替我们实际工作 ...
- 视频会议系统MCU服务器视频传输处理模式
视频会议系统MCU服务器视频传输处理模式 视频会议系统的组成主要包括终端.MCU服务器.网守等,其中的MCU服务器是整个系统的核心,视频会议系统的性能很大程度取决于MCU服务器的性能,因此MCU服务器 ...
- LeetCode 145. 二叉树的后序遍历 (用栈实现后序遍历二叉树的非递归算法)
题目链接:https://leetcode-cn.com/problems/binary-tree-postorder-traversal/ 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [ ...
- 【笔记】机器学习 - 李宏毅 - 12 - CNN
Convolutional Neural Network CNN 卷积神经网络 1. 为什么要用CNN? CNN一般都是用来做图像识别的,当然其他的神经网络也可以做,也就是输入一张图的像素数组(pix ...
- WebGL_0004:带贴图的材质透明效果
在材质中: "blendType": 2,
- C - Beautiful Now
Anton has a positive integer nn, however, it quite looks like a mess, so he wants to make it beautif ...
- 航空航天专用Everspin非易失性MRAM存储器
TAMU是由瑞典乌普萨拉的Ångström航空航天公司(ÅAC)开发的高级磁力计子系统.TAMU的目的是提供地球磁场的磁力计数据,以便与子画面观测相关.实验性TAMU由使用领先技术制造的四种类型的设备 ...
- springboot的yml配置文件里有多个参数的调用方式
本篇教程适用于配置文件一级下有多个二级或三级时,如何在service层不用通过多个@Value就能获取配置文件的参数 例如yml配置是这样的: 如果service层要引用这些参数,用多个@Value( ...
- C#中怎样在ToolStripMenuItem下再添加子级菜单
场景 在右键菜单ContextMenuStrip下添加子菜单选项可以通过 ContextMenuStrip menuStrip ToolStripMenuItem mnuChartOption = n ...