【BZOJ3223】【luoguP3391】文艺平衡树
description
您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1
analysis
我他妈终于会$splay$翻转板子了
注意翻转标记不用整条链下传,只需查找时交换儿子节点
注意下标和存储值是不一样的
code
#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 100005
#define INF 1000000007
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i)
using namespace std;
ll tr[MAXN][2];
ll fa[MAXN],size[MAXN],val[MAXN],rev[MAXN];
ll n,m,tot,root;
inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
inline void newnode(ll &x,ll y,ll z)
{
x=++tot,tr[x][0]=tr[x][1]=0,fa[x]=z,size[x]=1,val[x]=y;
}
inline void update(ll x)
{
size[x]=size[tr[x][0]]+size[tr[x][1]]+1;
}
inline void build(ll &x,ll l,ll r,ll y)
{
if (l>r)return;
ll mid=(l+r)>>1;newnode(x,mid,y);
build(tr[x][0],l,mid-1,x),build(tr[x][1],mid+1,r,x);
update(x);
}
inline ll lr(ll x)
{
return tr[fa[x]][1]==x;
}
inline void rotate(ll x)
{
ll y=fa[x],k=lr(x);
tr[y][k]=tr[x][!k];
if (tr[x][!k])fa[tr[x][!k]]=y;
fa[x]=fa[y];
if (fa[y])tr[fa[y]][lr(y)]=x;
tr[x][!k]=y,fa[y]=x;
update(y),update(x);
}
inline void splay(ll x,ll y)
{
while (fa[x]!=y)
{
if (fa[fa[x]]!=y)
{
if (lr(fa[x])==lr(x))rotate(fa[x]);
else rotate(x);
}
rotate(x);
}
if (y==0)root=x;
}
inline void down(ll x)
{
if (rev[x])
{
swap(tr[x][0],tr[x][1]);
rev[tr[x][0]]^=1,rev[tr[x][1]]^=1,rev[x]=0;
}
}
inline ll find(ll x,ll y)
{
down(x);
if (y==size[tr[x][0]]+1)return x;
if (y<=size[tr[x][0]])return find(tr[x][0],y);
else return find(tr[x][1],y-size[tr[x][0]]-1);
}
inline void modify(ll x,ll y)
{
ll l=find(root,x),r=find(root,y+2);
splay(l,0),splay(r,root);
rev[tr[r][0]]^=1;
}
int main()
{
freopen("P3391.in","r",stdin);
n=read(),m=read();
newnode(root,INF,0),newnode(tr[root][1],INF,root);
build(tr[tr[root][1]][0],1,n,tr[root][1]);
while (m--)
{
ll x=read(),y=read();
modify(x,y);
}
fo(i,2,n+1)printf("%lld ",val[find(root,i)]);
return 0;
}
【BZOJ3223】【luoguP3391】文艺平衡树的更多相关文章
- BZOJ3223:文艺平衡树——超详细题解
http://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面复制于洛谷. 题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写 ...
- 【BZOJ3223】文艺平衡树(Splay)
题面 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 ...
- [BZOJ3223] [Tyvj1729] 文艺平衡树 (splay)
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
- [Bzoj3223][Tyvj1729] 文艺平衡树(splay/无旋Treap)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=3223 平衡树处理区间问题的入门题目,普通平衡树那道题在维护平衡树上是以每个数的值作为维护 ...
- 【bzoj3223】文艺平衡树
#include<bits/stdc++.h> #define N 300005 #define rat 4 using namespace std; struct Node{ int s ...
- [BZOJ3223/Tyvj1729]文艺平衡树
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列 其中需要提供以下操作: 翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
- [BZOJ3223]Tyvj 1729 文艺平衡树
[BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...
- luoguP3391[模板]文艺平衡树(Splay) 题解
链接一下题目:luoguP3391[模板]文艺平衡树(Splay) 平衡树解析 这里的Splay维护的显然不再是权值排序 现在按照的是序列中的编号排序(不过在这道题目里面就是权值诶...) 那么,继续 ...
- BZOJ3223: Tyvj 1729 文艺平衡树 [splay]
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3595 Solved: 2029[Submit][Sta ...
- bzoj3223 文艺平衡树 (treap or splay分裂+合并)
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 3313 Solved: 1883 [Submit][S ...
随机推荐
- console.log("正常-普天数据已调用");
console.log("正常-普天数据已调用");
- 杂项:CSS3
ylbtech-杂项:CSS3 1.返回顶部 1. CSS3是CSS(层叠样式表)技术的升级版本,于1999年开始制订,2001年5月23日W3C完成了CSS3的工作草案,主要包括盒子模型.列表模块. ...
- Devstack单节点环境实战配置
本文为minxihou的翻译文章,转载请注明出处Bob Hou: http://blog.csdn.net/minxihou JmilkFan:minxihou的技术博文方向是 算法&Open ...
- Putty 两步代理访问互联网
工作在机房,有时需要访问外网. 此时浏览器需要使用代理服务器,访问的流程如下: 由于SERVER2不能直接访问互联网,而SERVER3可以(机房无法直接访问SERVER3)所以需要两步代理. 配置流程 ...
- 6 Accessing and Managing Symbols with armlink
6.4 Image$$ execution region symbols The linker generates Image$$ symbols for every execution region ...
- AtCoder ABC 130F Minimum Bounding Box
题目链接:https://atcoder.jp/contests/abc130/tasks/abc130_f 题目大意 给定地图上 N 个点的坐标和移动方向,它们会以每秒 1 个单位的速度移动,设 A ...
- 绿色版mysql 免安装使用(转载)
MySQL绿色版的安装(mysql-5.6.22-win32.zip) Posted on 2015-01-31 23:21 卒子 阅读(10739) 评论(2) 编辑 收藏 由于工作需要最近要开始研 ...
- springboot整合thymeleaf手动渲染
Thymeleaf手动渲染 为提高页面访问速度,可缓存html页面,客户端请求从缓存获取,获取不到再手动渲染 在spring4下 @Autowired ThymeleafViewResolver th ...
- vue使用axios提交formdata格式的数据
参考: https://www.cnblogs.com/qwert1/p/8909455.html https://blog.csdn.net/qq_42984640/article/details/ ...
- 常见的arp欺骗
三.常见ARP欺骗形式 1.假冒ARP reply包(单播) XXX,I have IP YYY and my MAC is ZZZ! 2.假冒ARP reply包(广播) Hello everyon ...