splay维护区间最大值、最小值、相邻两数差的绝对值的最小值即可。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cmath>
  4. #include<cstdlib>
  5. #include<cstring>
  6. #include<algorithm>
  7. using namespace std;
  8. #define ll long long
  9. #define N 100010
  10. #define inf 2100000000
  11. #define lson tree[k].ch[0]
  12. #define rson tree[k].ch[1]
  13. char getc(){char c=getchar();while ((c<'A'||c>'Z')&&(c<'a'||c>'z')&&(c<''||c>'')) c=getchar();return c;}
  14. int gcd(int n,int m){return m==?n:gcd(m,n%m);}
  15. int read()
  16. {
  17. int x=,f=;char c=getchar();
  18. while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
  19. while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
  20. return x*f;
  21. }
  22. int n,m,a[N],cnt,root;
  23. struct data{int ch[],fa,x,d,s,max,min,mind;
  24. }tree[N<<];
  25. void up(int k)
  26. {
  27. tree[k].max=max(max(tree[lson].max,tree[rson].max),tree[k].x);
  28. tree[k].min=min(min(tree[lson].min,tree[rson].min),tree[k].x);
  29. tree[k].mind=min(min(tree[lson].mind,tree[rson].mind),tree[k].d);
  30. tree[k].s=tree[lson].s+tree[rson].s+;
  31. }
  32. int build(int l,int r,int from)
  33. {
  34. if (l>r) return ;
  35. int mid=l+r>>,k=++cnt;tree[k].fa=from;tree[k].s=;
  36. tree[k].x=tree[k].max=tree[k].min=a[mid];
  37. tree[k].d=tree[k].mind=abs(a[mid]-a[mid+]);
  38. lson=build(l,mid-,k),rson=build(mid+,r,k);
  39. up(k);
  40. return k;
  41. }
  42. int whichson(int k){return tree[tree[k].fa].ch[]==k;}
  43. void move(int k)
  44. {
  45. int fa=tree[k].fa,gf=tree[fa].fa,p=whichson(k);
  46. tree[gf].ch[whichson(fa)]=k,tree[k].fa=gf;
  47. tree[tree[k].ch[!p]].fa=fa,tree[fa].ch[p]=tree[k].ch[!p];
  48. tree[k].ch[!p]=fa,tree[fa].fa=k;
  49. up(fa),up(k);
  50. }
  51. void splay(int k,int rt)
  52. {
  53. while (tree[k].fa!=rt)
  54. {
  55. int fa=tree[k].fa;
  56. if (tree[fa].fa!=rt)
  57. if (whichson(k)^whichson(fa)) move(k);
  58. else move(fa);
  59. move(k);
  60. }
  61. if (!rt) root=k;
  62. }
  63. int find(int k,int x)
  64. {
  65. if (tree[lson].s==x) return k;
  66. else if (tree[lson].s>x) return find(lson,x);
  67. else return find(rson,x-tree[lson].s-);
  68. }
  69. void ins(int k,int x)
  70. {
  71. int p=find(root,k-),q=find(root,k);
  72. splay(p,),splay(q,p);
  73. k=++cnt;tree[k].fa=q;tree[k].s=;
  74. tree[k].x=tree[k].max=tree[k].min=x;
  75. tree[k].d=tree[k].mind=abs(x-tree[q].x);
  76. tree[q].ch[]=k,up(q);
  77. tree[p].d=abs(tree[p].x-x),up(p);
  78. }
  79. void del(int k)
  80. {
  81. int p=find(root,k-),q=find(root,k+);
  82. splay(p,),splay(q,p);
  83. tree[q].ch[]=,up(q);
  84. tree[p].d=abs(tree[p].x-tree[q].x),up(p);
  85. }
  86. int query(int l,int r,int op)
  87. {
  88. int p=find(root,l-),q=find(root,r+);
  89. splay(p,),splay(q,p);
  90. int k=tree[q].ch[];
  91. if (op==) return tree[k].max;
  92. else if (op==) return tree[k].min;
  93. else return tree[k].mind;
  94. }
  95. int main()
  96. {
  97. #ifndef ONLINE_JUDGE
  98. freopen("bzoj4864.in","r",stdin);
  99. freopen("bzoj4864.out","w",stdout);
  100. const char LL[]="%I64d\n";
  101. #else
  102. const char LL[]="%lld\n";
  103. #endif
  104. n=read(),m=read();
  105. for (int i=;i<=n;i++) a[i]=read();
  106. tree[].max=tree[].d=-inf,tree[].min=tree[].mind=tree[].d=inf;
  107. root=build(,n+,);
  108. while (m--)
  109. {
  110. char c=getc();
  111. if (c=='m')
  112. {
  113. c=getc();
  114. if (c=='e')
  115. {
  116. int x=read(),y=read();
  117. del(x);del(x);ins(x,y);
  118. }
  119. else
  120. {
  121. int l=read(),r=read();
  122. if (c=='a') printf("%d\n",query(l,r,)-query(l,r,));
  123. else printf("%d\n",query(l,r-,));
  124. }
  125. }
  126. else
  127. {
  128. int x=read(),y=read();
  129. ins(x+,y);
  130. }
  131. }
  132. return ;
  133. }

BZOJ4864 BeiJing 2017 Wc神秘物质(splay)的更多相关文章

  1. BZOJ4864: [BeiJing 2017 Wc]神秘物质(Splay)

    Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便 ...

  2. 【BZOJ4864】[BeiJing 2017 Wc]神秘物质 Splay

    [BZOJ4864][BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微 ...

  3. [bzoj4864][BeiJing 2017 Wc]神秘物质

    来自FallDream的博客,未经允许,请勿转载,谢谢. 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研 ...

  4. BZOJ4864[BeiJing 2017 Wc]神秘物质——非旋转treap

    题目描述 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子.这 一天, 小诚刚从研究所得到了一块奇异的陨石样本, 便迫不及待地开始 ...

  5. BZOJ_4864_[BeiJing 2017 Wc]神秘物质_Splay

    BZOJ4864_[BeiJing 2017 Wc]神秘物质_Splay Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天 ...

  6. BZOJ 4864: [BeiJing 2017 Wc]神秘物质 解题报告

    4864: [BeiJing 2017 Wc]神秘物质 Description 21ZZ 年,冬. 小诚退休以后, 不知为何重新燃起了对物理学的兴趣. 他从研究所借了些实验仪器,整天研究各种微观粒子. ...

  7. BZOJ 4864: [BeiJing 2017 Wc]神秘物质 (块状链表/平衡树 )

    这就是一道数据结构裸题啊,最大极差就是区间最大值减最小值,最小极差就是相邻两个数差的最小值.然后平衡树splay/treap或者块状链表维护就行了. 第一次自己写块状链表,蛮好写,就是长..然后就BZ ...

  8. #4864. [BeiJing 2017 Wc]神秘物质 [FHQ Treap]

    这题其实挺简单的,有个东西可能稍微难维护了一点点.. \(merge\ x\ e\) 当前第 \(x\) 个原子和第 \(x+1\) 个原子合并,得到能量为 \(e\) 的新原子: \(insert\ ...

  9. 【BZOJ4864】神秘物质 [Splay]

    神秘物质 Time Limit: 10 Sec  Memory Limit: 256 MB Description Input Output Sample Input Sample Output 1 ...

随机推荐

  1. Spring Cloud 分布式事务管理

    Spring Cloud 分布式事务管理 在微服务如火如荼的情况下,越来越多的项目开始尝试改造成微服务架构,微服务即带来了项目开发的方便性,又提高了运维难度以及网络不可靠的概率. Spring Clo ...

  2. VINS(九)Ceres Solver优化(未完待续)

    使用Ceres Solver库处理后端优化问题,首先系统的优化函数为

  3. imageNamed和imageWithContextOfFile的区别?哪个性能高

    imageNamed性能高 1.用imageNamed的方式加载时,图片使用完毕后缓存到内存中,内存消耗多,加载速度快.即使生成的对象被 autoReleasePool释放了,这份缓存也不释放,如果图 ...

  4. UPA深度性能报告解读

    WeTest 导读 UPA作为腾讯WeTest与Unity官方联合打造的客户端性能分析工具,为开发者提供了极大的便利和效能提升.产出的分析报告内容详尽,但您是否真的读懂了报告?是否了解每项数据的含义? ...

  5. OSG-简单模型控制

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

  6. Java开发工程师(Web方向) - 03.数据库开发 - 第2章.数据库连接池

    第2章--数据库连接池 数据库连接池 一般而言,在实际开发中,往往不是直接使用JDBC访问后端数据库,而是使用数据库连接池的机制去管理数据库连接,来实现对后端数据库的访问. 建立Java应用程序到后端 ...

  7. Java学习 · 初识 面向对象基础二

    Package 为什么需要使用package a)   解决类重名的问题 b)   便于管理类 怎么使用package a)   类的第一句非注释性语句 b)   命名:域名倒着写,再加上模块名 注意 ...

  8. Vue-cli 工具 / 通过 Vue-cli 工具重构 todoList

    本博文归纳在 Vue 学习过程中, Vue-cli 工具的使用说明.除此之外还通过 Vue-cli 工具将之前 Vuejs 基本语法当中实现的 todoList 进行重构. 安装 npm instal ...

  9. Map Reduce Application(Join)

    We are going to explain how join works in MR , we will focus on reduce side join and map side join. ...

  10. Linux内核设计笔记14——块I/O层

    块I/O层 基本概念 系统中可以随机访问固定大小数据片的硬件设备称做块设备,这些固定大小的数据片称之为块.还有一种基本的设备称之为字符设备,其需要按照顺序访问,比如键盘. 扇区:块设备中最小的寻址单元 ...