模板题。

注意标记即可,另外,涉及区间翻转操作,记得设立首尾哨兵。

  1 #include<bits/stdc++.h>
2 using namespace std;
3 const int Maxn=0x3f3f3f3f;
4 const int N=1e5+5;
5 int lc[N],rc[N],fa[N],sze[N],vi[N],pos[N],a[N];
6 int n,m,x,y,rt,T;
7
8 inline int get(){//快读
9 char ch;bool f=false;int res=0;
10 while(((ch=getchar())<'0'||ch>'9')&&ch!='-');
11 if(ch=='-') f=true;
12 else res=ch-'0';
13 while((ch=getchar())>='0'&&ch<='9')
14 res=(res<<3)+(res<<1)+ch-'0';
15 return f?~res+1:res;
16 }
17
18 inline bool Wrt(const int&x)
19 {
20 return rc[fa[x]]==x;
21 }
22
23 inline void down(const int &x){//下传标记
24 if(x&&pos[x]){
25 pos[lc[x]]^=1;
26 pos[rc[x]]^=1;
27 swap(lc[x],rc[x]);
28 pos[x]=0;
29 }
30 }
31
32 inline void push(int x){
33 sze[x]=sze[lc[x]]+sze[rc[x]]+1;
34 }
35
36 inline int build(int lst,int l,int r){//lst该节点的祖先编号
37 if(l>r) return 0;
38 int mid=(l+r)>>1,x=++T;
39 fa[x]=lst;pos[x]=0;vi[x]=a[mid];
40 lc[x]=build(x,l,mid-1);
41 rc[x]=build(x,mid+1,r);
42 push(x);
43 return x;
44 }
45
46 inline void rot(int x){//单旋
47 int y=fa[x],z=fa[y];
48 down(y);down(x);//下传标记
49 int b=(lc[y]==x)?rc[x]:lc[x];
50 fa[x]=z;fa[y]=x;
51 if(b) fa[b]=y;
52 if(z) (y==lc[z]?lc[z]:rc[z])=x;
53 if(x==lc[y]) rc[x]=y,lc[y]=b;
54 else lc[x]=y,rc[y]=b;
55 push(y);push(x);//更新
56 }
57
58 inline void splay(int x,int tar){
59 while(fa[x]!=tar){
60 if(fa[fa[x]]!=tar)
61 Wrt(x)==Wrt(fa[x])?rot(fa[x]):rot(x);
62 rot(x);
63 }
64 if(!tar) rt=x;
65 }
66
67 inline int Find(int k){//查找第k个数
68 int x=rt,y=k;
69 while(x){
70 down(x);
71 if(y<=sze[lc[x]]) x=lc[x];
72 else{
73 y-=sze[lc[x]]+1;
74 if(!y) return x;
75 x=rc[x];
76 }
77 }
78 }
79
80 /*inline void put(int x){//快输
81 if(x<0){
82 x=~x+1;
83 putchar('-');
84 }
85 if(x>9) put(x/10);
86 putchar(x%10+48);
87 }*/
88
89 inline void Print(int x){
90 down(x);
91 if(lc[x]) Print(lc[x]);
92 if(vi[x]!=-Maxn&&vi[x]!=Maxn)
93 // put(vi[x]),putchar(' ');//快输
94 cout<<vi[x]<<" ";
95 if(rc[x]) Print(rc[x]);
96 }
97
98 int main(){
99 n=get();m=get();
100 a[1]=-Maxn;a[n+2]=Maxn;
101 for(int i=1;i<=n;i++) a[i+1]=i;
102 rt=build(0,1,n+2);
103 while(m--){
104 int tx=Find(get());
105 int ty=Find(get()+2);
106 splay(tx,0);
107 splay(ty,tx);
108 pos[lc[rc[rt]]]^=1;
109 }
110 return Print(rt),0;
111 }

洛谷P3391 文艺平衡树 (Splay模板)的更多相关文章

  1. [洛谷P3391] 文艺平衡树 (Splay模板)

    初识splay 学splay有一段时间了,一直没写...... 本题是splay模板题,维护一个1~n的序列,支持区间翻转(比如1 2 3 4 5 6变成1 2 3 6 5 4),最后输出结果序列. ...

  2. 洛谷P3391文艺平衡树(Splay)

    题目传送门 转载自https://www.cnblogs.com/yousiki/p/6147455.html,转载请注明出处 经典引文 空间效率:O(n) 时间效率:O(log n)插入.查找.删除 ...

  3. BZOJ3223/洛谷P3391 - 文艺平衡树

    BZOJ链接 洛谷链接 题意 模板题啦~2 代码 //文艺平衡树 #include <cstdio> #include <algorithm> using namespace ...

  4. BZOJ3224/洛谷P3391 - 普通平衡树(Splay)

    BZOJ链接 洛谷链接 题意简述 模板题啦~ 代码 //普通平衡树(Splay) #include <cstdio> int const N=1e5+10; int rt,ndCnt; i ...

  5. 洛谷 P3391 文艺平衡树

    题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4 1 --b ...

  6. 洛谷.3391.文艺平衡树(fhq Traep)

    题目链接 //注意反转时先分裂r,因为l,r是针对整棵树的排名 #include<cstdio> #include<cctype> #include<algorithm& ...

  7. 洛谷 P3391 【模板】文艺平衡树(Splay)

    题目背景 这是一道经典的Splay模板题——文艺平衡树. 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1, ...

  8. 【阶梯报告】洛谷P3391【模板】文艺平衡树 splay

    [阶梯报告]洛谷P3391[模板]文艺平衡树 splay 题目链接在这里[链接](https://www.luogu.org/problemnew/show/P3391)最近在学习splay,终于做对 ...

  9. luoguP3391[模板]文艺平衡树(Splay) 题解

    链接一下题目:luoguP3391[模板]文艺平衡树(Splay) 平衡树解析 这里的Splay维护的显然不再是权值排序 现在按照的是序列中的编号排序(不过在这道题目里面就是权值诶...) 那么,继续 ...

随机推荐

  1. javascript自执行函数表达式

    解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明.// 下面2个括弧()都会立即执行(function () { /* code */ ...

  2. SpringBoot定时任务 - 集成quartz实现定时任务(单实例和分布式两种方式)

    最为常用定时任务框架是Quartz,并且Spring也集成了Quartz的框架,Quartz不仅支持单实例方式还支持分布式方式.本文主要介绍Quartz,基础的Quartz的集成案例本,以及实现基于数 ...

  3. .NET性能优化-使用SourceGenerator-Logger记录日志

    前言 在现在许许多多的应用系统中,日志非常关键,它即是排查问题的强力工具,也是程序员居家旅行工作甩锅必备良品. 在团队中编码中,我们都要求对于那些会变更数据的接口.调用第三方的接口记录请求和响应参数, ...

  4. 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像 ...

  5. Vue 路由的简单使用(命名路由、query路由传参、params路由传参)

    1 # Vue 路由 2 # 1.理解:一个路由(toute)就是一组映射关系(key-value),多个路由需要路由器(router)进行管理 3 # 2.前端路由:key是路径,value是组件 ...

  6. TS入门基础

    1,使用node.js 2,配置typescript node i -g typescript 3,创建ts文件 使用tsc + <文件名>在命令行中跑可以跑出一个一样得js文件默认生成的 ...

  7. Codeforces 1503C Travelling Salesman Problem(Dynamic Programming)

    题意 大家都是优秀生,这点英文还是看得懂的:点此看题 题解 由于旅行路线成一个环,所以从哪里出发不重要,我们把景点按照 a i a_i ai​ 排序,不妨就从左边最小的出发.基础的旅行费用 c i c ...

  8. 1.4_HTML的标签简介

    HTML 标签 HTML 标记标签通常被称为 HTML 标签 (HTML tag). HTML 标签是由尖括号包围的关键词,比如 <html> HTML 标签通常是成对!出现的,比如 &l ...

  9. Shiro反序列化利用

    Shiro反序列化利用 前言:hvv单位这个漏洞挺多的,之前没专门研究打法,特有此篇文章. Shiro rememberMe反序列化漏洞(Shiro-550) 漏洞原理 Apache Shiro框架提 ...

  10. 【java】学习路径39-Buffered缓冲输出流

    import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.IOException; pu ...