【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 ...
随机推荐
- 编译器报错: error LNK2001: unresolved external symbol "struct _ServiceDescriptorTable * KeServiceDescript
转自VC错误:http://www.vcerror.com/?p=10 问题描述: 编译器报错: error LNK2001: unresolved external symbol "str ...
- Java-Class-C:com.alibaba.fastjosn.JSON
ylbtech-Java-Class-C:com.alibaba.fastjosn.JSON 1.返回顶部 1.1.import com.alibaba.fastjson.JSON;import co ...
- Java父类强制转换子类原则
最近,微信群友在讨论子类父类的转换问题,其实不难,给大家用实例来说明一下就很明了了. 我们知道Java中子类转换成父类是没有任何问题的,那父类可以转换成子类吗? 来看下面这段程序: public cl ...
- <Django>一些小知识
''' ORM import pymysql pymysql.connect( ... ... ) 1.不同的程序员写的SQL水平参差不齐 2.执行效率也参差不齐 python语法 --自动翻译 -- ...
- 【2018ACM/ICPC网络赛】焦作赛区
A Magic Mirror 题目链接:https://nanti.jisuanke.com/t/31710 题意:输入字符串,如果是“Jessy”就输出“Good Guy!",否则输出“D ...
- Redis连不上的一些细节配置
远程链接redis连不上,在确保防火墙设置正确的情况下 把redis.conf中的 bind 127.0.0.1注释 另外把protected-mode yes 改为protected-mode no
- verifier 调试内存泄露
没啥技术含量,都是老段子了, 这次记下来,只是我想说,我也做过,留个念相. 前置条件,电脑里面必须得有Verifier,有了之后把自己的驱动加进去, WinDBG上双机,然后就可以跑了,跑一段时间就可 ...
- 从虚拟地址,到物理地址(开PAE)
学了好久好久,但是好久好久都没有用过,今天突然要用,都快忘了怎么玩了, 这里记录一下吧. 如何检测PAE r cr4 第5位如果是1,则开了PAE,否则没开 切入目标进程 查找一个自己关注的字符串s ...
- iOS音频开发系列-概述篇
概述 iOS中对于音频的处理,苹果提供了两个库. AVFoundation AudioToolbox 在iOS系统中apple对上述的流程进行了封装并提供了不同层次的接口
- html编写的日历
1.html (1) <html> <head> <meta http-equiv="Content-Type" content="text ...