https://www.luogu.org/problemnew/show/P3391

以前写过题解的入门题重写练板子。wdnmd真就 ' == ' 写成 ' = ' 了编译器不报错呗。

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn=100010;
  4. int n,m,rt=0,c[maxn][2]={},fa[maxn]={},rev[maxn]={},siz[maxn]={};
  5. inline void pushup(int x){
  6. siz[x]=siz[c[x][0]]+siz[c[x][1]]+1;
  7. }
  8. void pushdown(int x){
  9. if(rev[x]){
  10. swap(c[x][0],c[x][1]);
  11. rev[c[x][0]]^=1; rev[c[x][1]]^=1; rev[x]=0;
  12. }
  13. }
  14. void build(int x,int l,int r){
  15. if(l>r)return;
  16. if(l==r){
  17. fa[l]=x;siz[l]=1;
  18. if(l<x)c[x][0]=l;
  19. else c[x][1]=l;
  20. return;
  21. }
  22. int mid=(l+r)/2;
  23. build(mid,l,mid-1);build(mid,mid+1,r);
  24. if(mid<x)c[x][0]=mid;
  25. else c[x][1]=mid;
  26. fa[mid]=x;pushup(mid);
  27. }
  28. void rot(int x,int &k){
  29. int pa=fa[x],gpa,l,r;gpa=fa[pa];
  30. if(x==c[pa][0])l=0;
  31. else l=1; r=l^1;
  32. if(pa!=k){
  33. if(c[gpa][0]==pa)c[gpa][0]=x;
  34. else c[gpa][1]=x;
  35. }else k=x;
  36. fa[x]=gpa;fa[pa]=x;fa[c[x][r]]=pa;
  37. c[pa][l]=c[x][r];c[x][r]=pa;
  38. pushup(pa); pushup(x);
  39. }
  40. /*void dfs(int x){
  41. if(x==0)return;
  42. cout<<x<<c[x][0]<<c[x][1]<<endl;
  43. dfs(c[x][0]);
  44. dfs(c[x][1]);
  45. }*/
  46. void splay(int x,int &k){
  47. while(x!=k){
  48. int pa=fa[x];int gpa=fa[pa];
  49. if(pa!=k){
  50. if((c[gpa][1]==pa)^(c[pa][1]==x))rot(x,k);
  51. else rot(pa,k);
  52. }rot(x,k);
  53. //dfs(rt);cout<<endl;
  54. }
  55. }
  56. int find(int v,int x){
  57. pushdown(x);
  58. if(v==siz[c[x][0]]+1)return x;
  59. else if(v<siz[c[x][0]]+1) return find(v,c[x][0]);
  60. else return find(v-siz[c[x][0]]-1,c[x][1]);
  61. }
  62. void mrev(int l,int r){
  63. int x=find(l,rt),y=find(r+2,rt);
  64. //cout<<x<<y<<endl;
  65. splay(x,rt);splay(y,c[x][1]);
  66. //cout<<siz[y]<<endl;
  67. rev[c[y][0]]^=1;
  68. }
  69. int main(){
  70. scanf("%d%d",&n,&m);
  71. build(0,1,n+2);rt=(3+n)/2;
  72. for(int i=1;i<=m;++i){
  73. int x,y;
  74. scanf("%d%d",&x,&y);
  75. if(x!=y)mrev(x,y);
  76. }
  77. for(int i=1;i<=n;++i){
  78. printf("%d ",find(i+1,rt)-1);
  79. }cout<<endl;
  80. return 0;
  81. }

  

Luogu P3391 【模板】文艺平衡树 Splay 平衡树的更多相关文章

  1. JZYZOJ1998 [bzoj3223] 文艺平衡树 splay 平衡树

    http://172.20.6.3/Problem_Show.asp?id=1998 平衡树区间翻转的板子,重新写一遍,给自己码一个板子. #include<iostream> #incl ...

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

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

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

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

  4. [luogu P3391] 文艺平衡树

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

  5. 文艺平衡树 Splay 学习笔记(1)

    (这里是Splay基础操作,reserve什么的会在下一篇里面讲) 好久之前就说要学Splay了,结果苟到现在才学习. 可能是最近良心发现自己实在太弱了,听数学又听不懂只好多学点不要脑子的数据结构. ...

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

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

  7. 洛谷 P3380 【模板】二逼平衡树(树套树)-线段树套splay

    P3380 [模板]二逼平衡树(树套树) 题目描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 查询k在区间内的排名 查询区间内排名为k的值 修改某一位值上的数 ...

  8. luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树)(主席树)

    luogu P3919 [模板]可持久化数组(可持久化线段树/平衡树) 题目 #include<iostream> #include<cstdlib> #include< ...

  9. 【模板篇】splay(填坑)+模板题(普通平衡树)

    划着划着水一不小心NOIP还考的凑合了… 所以退役的打算要稍微搁置一下了… 要准备准备省选了…. 但是自己已经啥也不会了… 所以只能重新拾起来… 从splay开始吧… splay我以前扔了个板子来着, ...

随机推荐

  1. Linux -- touch 命令

    在Linux中,每个文件都关联一个时间戳,并且每个文件搜会存储最近一次访问的时间.最近一次修改的时间和最近一次变更的时间等信息.所以,无论何时我们创建一个新文件,访问或者修改一个已经存在的文件,文件的 ...

  2. GC偏好

    GC偏好 测序中的GC偏好指的是基因组上GC含量在50%左右的区域更容易被测到,产生的reads更多,这些区域的覆盖度更高, 在高GC或者低GC区域,不容易被测到,产生较少的reads,这些区域的覆盖 ...

  3. bootstrap 模态

    <script type="text/javascript" src="js/jquery-ui-custom.min.js"></scrip ...

  4. Java调用WebService方法总结(6)--XFire调用WebService

    XFire是codeHaus组织提供的一个WebService开源框架,目前已被Apache的CXF所取代,已很少有人用了,这里简单记录下其调用WebService使用方法.官网现已不提供下载,可以到 ...

  5. 分享一个vue项目“脚手架”项目的实现步骤

    搭建缘由 源于公司每次新启动一个由多人协同开发的项目都由负责人初始化项目之后,每个人再去从私服pull一下项目才开始开发.但是每次初始化工程都是一步步的造轮子,一个个依赖去安装,新建一个个不同功能的文 ...

  6. Linux环境变量$PATH

    3. 使用env命令显示所有的环境变量 # env HOSTNAME=redbooks.safe.org PVM_RSH=/usr/bin/rsh Shell=/bin/bash TERM=xterm ...

  7. 【转】关于TCP/IP,必须知道的十个知识点

    本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. 一.TCP/IP模型 TCP/IP协议模型(Transmission Control Protoc ...

  8. STM32+IAR 解决Error[Pe147]: declaration is incompatible with "__nounwind __interwork __softfp unsigned

    在IAR中编译STM32工程,遇到 Error[Pe147]: declaration is incompatible with "__nounwind __interwork __soft ...

  9. 资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统

    资源管理与调度系统-YARN资源隔离及以YARN为核心的生态系统 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是资源隔离 资源隔离是指为不同任务提供可独立使用的计算资源以 ...

  10. amazeui datepicker日历控件 设置默认当日

    amazeui datepicker日历控件 设置默认当日 背景: 最近在做一个系统的时候,前台需要选择日期,传给后台进行处理,每次都需要通过手动点击组件,选择日期,这样子很不好,所以我想通过程序自动 ...