BZOJ 3223 Tyvj 1729 文艺平衡树 | Splay 维护序列关系
题解:
每次reverse(l,r)
把l-1转到根,r+1变成他的右儿子,给r+1的左儿子打个标记就是一次反转操作了
每次find和dfs输出的时候下放标记,把左儿子和右儿子换一下
记得建树的时候建0到n+1
#include<cstdio>
#include<algorithm>
#include<cstring>
#define N 100010
#define which(x) (ls[fa[(x)]]==(x))
using namespace std;
int sz[N],ls[N],rs[N],fa[N],n,m,root,flag[N],id[N],idx;
void upt(int x) {sz[x]=+sz[ls[x]]+sz[rs[x]];}
int read()
{
int ret=,neg=;
char j=getchar();
for (;j>'' || j<'';j=getchar())
if (j=='-') neg=-;
for (;j>='' && j<='';j=getchar())
ret=ret*+j-'';
return ret*neg;
}
void write(int x)
{
if (x<) x=-x;
if (x>=) write(x/);
putchar(x%+'');
}
void swap_son(int u)
{
if (!u) return;
flag[u]^=;
swap(ls[u],rs[u]);
upt(u);
}
void pushdown(int u)
{
if (!flag[u]) return ;
swap_son(ls[u]),swap_son(rs[u]);
flag[u]=;
}
int Build(int l, int r)
{
int mid=l+r>>,u=++idx;
id[u]=mid;
if(mid>l) ls[u]=Build(l,mid-),fa[ls[u]]=u;
if(mid<r) rs[u]=Build(mid+,r),fa[rs[u]]=u;
upt(u);
return u;
}
void Rotate(int u)
{
int v=fa[u],w=fa[v],b=which(u)?rs[u]:ls[u];
if(w) which(v)?ls[w]=u:rs[w]=u;
which(u)?(ls[v]=b,rs[u]=v):(rs[v]=b,ls[u]=v);
fa[u]=w,fa[v]=u;
if(b) fa[b]=v;
upt(v),upt(u);
}
void Splay(int u, int tar)
{
while(fa[u] != tar)
{
if(fa[fa[u]] != tar)
{
if(which(u) == which(fa[u])) Rotate(fa[u]);
else Rotate(u);
}
Rotate(u);
}
if(!tar) root = u;
}
int find(int k)
{
int u=root;
pushdown(u);
while (sz[ls[u]]+!=k && u)
{
if (sz[ls[u]]>=k) u=ls[u];
else k-=sz[ls[u]]+,u=rs[u];
pushdown(u);
}
return u;
}
void rev(int l,int r)
{
int u=find(l-),v=find(r+);
Splay(u,);
Splay(v,u);
swap_son(ls[rs[root]]);
}
void dfs(int u)
{
pushdown(u);
if (ls[u]) dfs(ls[u]);
if (id[u]> && id[u]<n+) write(id[u]-),putchar(' ');
if (rs[u]) dfs(rs[u]);
}
int main()
{
scanf("%d%d",&n,&m);
root=Build(,n+);
for (int i=,l,r;i<=m;i++)
l=read(),r=read(),rev(l+,r+);
dfs(root);
return ;
}
BZOJ 3223 Tyvj 1729 文艺平衡树 | Splay 维护序列关系的更多相关文章
- BZOJ 3223: Tyvj 1729 文艺平衡树(splay)
速度居然进前十了...第八... splay, 区间翻转,用一个类似线段树的lazy标记表示是否翻转 ------------------------------------------------- ...
- bzoj 3223: Tyvj 1729 文艺平衡树 (splay)
链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3223 题面: 3223: Tyvj 1729 文艺平衡树 Time Limit: 10 S ...
- BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 6881 Solved: 4213[Submit][Sta ...
- bzoj 3223/tyvj 1729 文艺平衡树 splay tree
原题链接:http://www.tyvj.cn/p/1729 这道题以前用c语言写的splay tree水过了.. 现在接触了c++重写一遍... 只涉及区间翻转,由于没有删除操作故不带垃圾回收,具体 ...
- BZOJ - 3223 Tyvj 1729 文艺平衡树 (splay/无旋treap)
题目链接 splay: #include<bits/stdc++.h> using namespace std; typedef long long ll; ,inf=0x3f3f3f3f ...
- BZOJ 3223: Tyvj 1729 文艺平衡树
3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 3628 Solved: 2052[Submit][Sta ...
- fhq_treap || BZOJ 3223: Tyvj 1729 文艺平衡树 || Luogu P3391 【模板】文艺平衡树(Splay)
题面: [模板]文艺平衡树(Splay) 题解:无 代码: #include<cstdio> #include<cstring> #include<iostream> ...
- [BZOJ 3223 & Tyvj 1729]文艺平衡树 & [CodeVS 3243]区间翻转
题目不说了,就是区间翻转 传送门:BZOJ 3223 和 CodeVS 3243 第一道题中是1~n的区间翻转,而第二道题对于每个1~n还有一个附加值 实际上两道题的思路是一样的,第二题把值对应到位置 ...
- BZOJ 3223 Tyvj 1729 文艺平衡树(Splay)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3223 [题目大意] 给出一数列,问m次区间翻转后的结果. [题解] Splay 区间翻 ...
随机推荐
- WebStrome react-native代码智能提示
1.clone到本地 git clone https://github.com/virtoolswebplayer/ReactNative-LiveTemplate 2,添加ReactNative. ...
- 爬虫学习(十九)——Scrapy的学习及其使用
Scrapy框架的介绍 Scrapy,非常的强悍,通过python语言编写的,非常知名的爬虫框架 框架工作流程 框架流程图 基本工作流程; 1.引擎向spiders要url 2.引擎将要爬取的url给 ...
- 【MYSQL笔记1】mysql的基础知识
首先进去mysql.打开电脑命令提示符(cmd):输入mysql -uroot -p 代表的意思是使用ruser使用者root的方式,打开mysql,-p代表password,如果有的话,回车之后 ...
- 利用Selenium+java实现淘宝自动结算购物车商品(附源代码)
转载请声明原文地址! 本次的主题是利用selenium+java实现结算购买购物车中的商品. 话不多说,本次首先要注意的是谷歌浏览器的版本,浏览器使用的驱动版本,selenium的jar包版本. ...
- FullCalendar日历插件(中文API)
FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发,本文将FullCalendar的常用属性和方法.回调函数等整理成中 ...
- php数据加密及数据存储和传输
一.前言 个人认为,PHP是世界上为数不多,最人性化的语言. 虽然是二次开发.弱类型语言,由C/C++编写的PHP引擎去解析.但是,其代码优雅性和其运行速度不亚于,其他编译语言. 二.PHP数据加密 ...
- PHP关于 []
在一个表格里,提交时,名字部分加一个[],表示数组,这样,存在多个同样名字的name.前面的value不会替代后面value,如下面 <td><input name="so ...
- python QQ邮件发送邮件
# -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import ...
- 笔记-git-git服务器安装及配置
笔记-git-git服务器安装及配置 1. GIT服务器简介 Git 可以使用四种主要的协议来传输数据:本地传输,SSH 协议,Git 协议和 HTTP 协议.下面分别介绍一下哪些情形应该使 ...
- P3817 小A的糖果(洛谷月赛)
P3817 小A的糖果 题目描述 小A有N个糖果盒,第i个盒中有a[i]颗糖果. 小A每次可以从其中一盒糖果中吃掉一颗,他想知道,要让任意两个相邻的盒子中加起来都只有x颗或以下的糖果,至少得吃掉几颗糖 ...