题解:

splay翻转(只有翻转

sgu ac,spoj tle

代码:

  1. #pragma GCC optimize(2)
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=;
  7. int n,m,sz,rt,pre[N],cas,l,r,c[N][],alen,data[N],size[N],rev[N];
  8. void pushup(int k)
  9. {
  10. size[k]=size[c[k][]]+size[c[k][]]+;
  11. }
  12. void pushdown(int k)
  13. {
  14. int l=c[k][],r=c[k][];
  15. if(rev[k])
  16. {
  17. swap(c[k][],c[k][]);
  18. rev[l]^=;rev[r]^=;
  19. rev[k]=;
  20. }
  21. }
  22. void rotate(int x,int &k)
  23. {
  24. int y=pre[x],z=pre[y],l,r;
  25. if(c[y][]==x)l=;
  26. else l=;
  27. r=l^;
  28. if(y==k)k=x;
  29. else {if(c[z][]==y)c[z][]=x;else c[z][]=x;}
  30. pre[x]=z;pre[y]=x;pre[c[x][r]]=y;
  31. c[y][l]=c[x][r];c[x][r]=y;
  32. pushup(y);pushup(x);
  33. }
  34. void splay(int x,int &k)
  35. {
  36. while(x!=k)
  37. {
  38. int y=pre[x],z=pre[y];
  39. if(y!=k)
  40. {
  41. if(c[y][]==x^c[z][]==y)rotate(x,k);
  42. else rotate(y,k);
  43. }
  44. rotate(x,k);
  45. }
  46. }
  47. int find(int k,int rank)
  48. {
  49. pushdown(k);
  50. int l=c[k][],r=c[k][];
  51. if (size[l]+==rank)return k;
  52. else if (size[l]>=rank)return find(l,rank);
  53. else return find(r,rank-size[l]-);
  54. }
  55. void change(int l,int r)
  56. {
  57. int x=find(rt,l),y=find(rt,r+);
  58. splay(x,rt);splay(y,c[x][]);
  59. int z=c[y][];
  60. rev[z]^=;
  61. }
  62. void build(int l,int r,int f)
  63. {
  64. if(l>r)return;
  65. int now=data[l],last=data[f];
  66. if(l==r)
  67. {
  68. pre[now]=last;size[now]=;
  69. if(l<f)c[last][]=now;
  70. else c[last][]=now;
  71. return;
  72. }
  73. int mid=(l+r)>>;now=data[mid];
  74. build(l,mid-,mid);
  75. build(mid+,r,mid);
  76. pre[now]=last;pushup(mid);
  77. if(mid<f)c[last][]=now;
  78. else c[last][]=now;
  79. }
  80. int main()
  81. {
  82. scanf("%d%d",&n,&m);
  83. for(int i=;i<=n+;i++)data[i]=++sz;
  84. build(,n+,);rt=(n+)>>;
  85. while (m--)
  86. {
  87. scanf("%d%d",&l,&r);
  88. if (l!=r)change(l,r);
  89. }
  90. for(int i=;i<=n+;i++)printf("%d\n",find(rt,i)-);
  91. }

sgu187&&spoj7734的更多相关文章

  1. POJ 2112 - Optimal Milking

    原题地址:http://poj.org/problem?id=2112 题目大意:有K个挤奶机(标号为1 ~ K)和C头奶牛(编号为K + 1 ~ K + C),以邻接矩阵的方式给出它们两两之间的距离 ...

  2. SGU Volume 1

    SGU 解题报告(持续更新中...Ctrl+A可看题目类型): SGU101.Domino(多米诺骨牌)------------★★★type:图 SGU102.Coprimes(互质的数) SGU1 ...

随机推荐

  1. CreateDirectory 创建文件夹 C\C++

    函数原型: CreateDirectory( LPCTSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes ); 简介: CreateD ...

  2. 在terminal下的快捷键

    1.回到行首的快捷键:ctrl + esc 2.ctrl+[可以替代esc

  3. 以太坊(Ethereum) - 节点时间未同步和区块同步失败案例分析

    背景 以太坊技术搭建的区块链网络,节点间需要保证时间一致,才能正常有序的发送交易和生成区块,使得众多节点共同维护分布式账本(区块数据+状态数据).但是,网络中节点的系统时间不一致回出现什么现象呢,我们 ...

  4. [BZOJ1497]最大获利

    Description 新的技术正冲击着手机通讯市场,对于各大运营商来说,这既是机遇,更是挑战.THU集团旗下的CS&T通讯公司在新一代通讯技术血战的前夜,需要做太多的准备工作,仅就站址选择一 ...

  5. c# 、 Asp.net 获取本地IP和MAC地址

    using System; using System.Management; using System.Net; public class Program { static void Main(str ...

  6. Java jdbc访问sqlserver,oracle数据库 DEMO

    1.JDBC访问Oracle数据库 public class Jdbc_Oracle { // 静态代码块,只会执行一次,类似C#静态构造方法 static { try { // 加载数据库驱动一次 ...

  7. [原][译][osg][osgEarth]飞行模拟软件JSBSim的操作(FGFCS类)

    英文原文在 FGFCS.h头文件中 JSBSim的控制操作封装了飞行控制系统(FCS)的功能. 这个FGFCS类还封装了相同的“系统”和“自动驾驶仪”能力. FGFCS包含用来定义一个系统或飞行模型体 ...

  8. iOS开发中各种关键字的区别

    1.一些概念 1.浅Copy:指针的复制,只是多了一个指向这块内存的指针,共用一块内存. 深Copy:内存的复制,两块内存是完全不同的, 也就是两个对象指针分别指向不同的内存,互不干涉. 2.atom ...

  9. [Java学习] 再谈Java包

    在Java中,为了组织代码的方便,可以将功能相似的类放到一个文件夹内,这个文件夹,就叫做包. 包不但可以包含类,还可以包含接口和其他的包. 目录以"\"来表示层级关系,例如 E:\ ...

  10. Confluence 6 嵌套用户组的影响

    本部分说明了嵌套用户组对用户登录,权限和查看更新用户组的影响. 登录 如果用户属于一个授权的用户组或者授权用户组中的子用户组,当用户登录后,用户可以访问应用程序. 权限 如果用户属于的用户组或者用户组 ...