紫薯例题

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. const int N=1e6+,inf=0x3f3f3f3f;
  5. int rt[N],siz[N*],ch[N*][],tot,n,d,ver;
  6. char buf[N],val[N*];
  7. #define l(u) ch[u][0]
  8. #define r(u) ch[u][1]
  9. int rnd() {
  10. const int M=(1ll<<)-,X=;
  11. static int seed=time()%M;
  12. return seed=(ll)seed*X%M;
  13. }
  14. int newnode(char c) {int u=++tot; siz[u]=,l(u)=r(u)=,val[u]=c; return u;}
  15. int cpy(int v) {int u=++tot; siz[u]=siz[v],l(u)=l(v),r(u)=r(v),val[u]=val[v]; return u;}
  16. void pu(int u) {siz[u]=siz[l(u)]+siz[r(u)]+;}
  17. void sp(int w,int k,int& u,int& v) {
  18. if(!w) {u=v=; return;}
  19. if(k<=siz[l(w)])v=cpy(w),sp(l(w),k,u,l(v)),pu(v);
  20. else u=cpy(w),sp(r(w),k-(siz[l(w)]+),r(u),v),pu(u);
  21. }
  22. void mg(int& w,int u,int v) {
  23. if(!u||!v) {w=u|v; return;}
  24. if(rnd()%(siz[u]+siz[v])<siz[u])w=u,mg(r(w),r(u),v);
  25. else w=v,mg(l(w),u,l(v));
  26. pu(w);
  27. }
  28. void build(int& u,int l,int r) {
  29. if(l>r) {u=; return;}
  30. int mid=(l+r)>>;
  31. u=newnode(buf[mid]);
  32. build(l(u),l,mid-),build(r(u),mid+,r),pu(u);
  33. }
  34. void ins(int& rt,int p) {
  35. int n=strlen(buf);
  36. int L,M,R;
  37. build(M,,n-);
  38. sp(rt,p,L,R),mg(L,L,M),mg(rt,L,R);
  39. }
  40. void del(int& rt,int p,int c) {
  41. int L,M,R;
  42. sp(rt,p+c-,L,R),sp(L,p-,L,M),mg(rt,L,R);
  43. }
  44. void dfs(int u) {
  45. if(!u)return;
  46. dfs(l(u)),putchar(val[u]),dfs(r(u));
  47. if(val[u]=='c')++d;
  48. }
  49. void pr(int& rt,int p,int c) {
  50. int L,M,R;
  51. sp(rt,p+c-,L,R),sp(L,p-,L,M);
  52. dfs(M),puts("");
  53. mg(L,L,M),mg(rt,L,R);
  54. }
  55. int main() {
  56. scanf("%d",&n);
  57. for(int i=; i<=n; ++i) {
  58. int f;
  59. scanf("%d",&f);
  60. if(f==) {
  61. int p;
  62. scanf("%d%s",&p,buf),p-=d;
  63. ++ver,ins(rt[ver]=rt[ver-],p);
  64. } else if(f==) {
  65. int p,c;
  66. scanf("%d%d",&p,&c),p-=d,c-=d;
  67. ++ver,del(rt[ver]=rt[ver-],p,c);
  68. } else {
  69. int v,p,c;
  70. scanf("%d%d%d",&v,&p,&c),v-=d,p-=d,c-=d;
  71. pr(rt[v],p,c);
  72. }
  73. }
  74. return ;
  75. }

UVA - 12538 Version Controlled IDE (可持久化treap)的更多相关文章

  1. UVA 12538 Version Controlled IDE 解题报告

    题意:给三种操作 1.在p位置插入一个字符串. 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 解法:可以用平衡树做,但是不会.后来又听说可一用一个叫ro ...

  2. UVALive 6145 Version Controlled IDE(可持久化treap、rope)

    题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...

  3. UVA12538 Version Controlled IDE

    题意翻译 维护一种数据结构,资磁三种操作. 1.在p位置插入一个字符串s 2.从p位置开始删除长度为c的字符串 3.输出第v个历史版本中从p位置开始的长度为c的字符串 1≤n≤50000,所有字符串总 ...

  4. UVA - 11922 区间反转+拼接 可持久化Treap

    题意:一开始给出一个序列\(1,2...n\),然后\(m\)次操作,每次把\([l,r]\)翻转并且拼接到序列的后面,求最后形成的序列 打个pushdown标记就好 #include<iost ...

  5. BZOJ 3595: [Scoi2014]方伯伯的Oj SBT+可持久化Treap

    3595: [Scoi2014]方伯伯的Oj Time Limit: 6 Sec  Memory Limit: 256 MBSubmit: 102  Solved: 54[Submit][Status ...

  6. 【模板】可持久化文艺平衡树-可持久化treap

    题目链接 题意 对于各个以往的历史版本实现以下操作: 在第 p 个数后插入数 x . 删除第 p 个数. 翻转区间 [l,r],例如原序列是 \(\{5,4,3,2,1\}\),翻转区间 [2,4] ...

  7. 高rong效chang的可持久化treap

    很多人觉得可持久化treap很慢,但是事实上只是他们可持久化treap的写法不对.他们一般是用split和merge实现所有功能,但是这样会有许多不必要的分裂.其实我们可以用一种特殊的方式来实现插入和 ...

  8. 可持久化Treap

    终于写了一次可持久化Treap,做的是可持久化序列的模板题. Treap Treap=Tree+Heap,是一个随机化的数据结构.它的每个节点至少有两个关键字,一个是我们要存储的\(val\),一个是 ...

  9. Codeforces - 38G 可持久化Treap 区间操作

    题意:\(n\)个人排队,每个人有重要度\(p\)和不要脸度\(c\),如果第\(i\)个人的重要度大于第\(i-1\)个人的重要度,那么他们之间可以交换,不要脸度-1,交换后先前的第\(i\)个人也 ...

随机推荐

  1. 【HANA系列】SAP HANA查看某一用户最后登录时间及无效连接次数

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA查看某一用户最后 ...

  2. 深入源码分析Spring中的构造器注入

    # 1. 示例 构造器注入类,分别有三个构造器,一个是无参构造器,一个是注入一个Bean的构造器,一个是注入两个Bean的构造器: public class ConstructorAutowiredT ...

  3. 【LeetCode】 454、四数之和 II

    题目等级:4Sum II(Medium) 题目描述: Given four lists A, B, C, D of integer values, compute how many tuples (i ...

  4. Interceptors - 拦截器

    1.概述 Flume有能力在运行阶段修改/删除Event,这是通过拦截器(Interceptors)来实现的. 拦截器需要实现org.apache.flume.interceptor.Intercep ...

  5. ranch源码阅读

    ranch 整体理解 从整体上的话,ranch主要是三层的监控树 第一层 ranch_sup,负责整个应用的启动,启动了ranch_server进程,它管理了整个应用的配置和连接数据 第二层 ranc ...

  6. java8流式编程(一)

    传送门 <JAVA8开发指南>为什么你需要关注 JAVA8 <Java8开发指南>翻译邀请 Java8初体验(一)lambda表达式语法 Java8初体验(二)Stream语法 ...

  7. gzip 命令

    NAME gzip -- compression/decompression tool using Lempel-Ziv coding (LZ77) SYNOPSIS gzip [-cdfhkLlNn ...

  8. java并发学习资料

    1.Java 并发编程知识梳理以及常见处理模式 https://github.com/Fadezed/concurrency 2.Java 高并发多线程编程系列 https://github.com/ ...

  9. LZH的多重影分身 qduoj 思维 差分

    LZH的多重影分身 qduoj 思维 差分 原题链接:https://qduoj.com/problem/591 题意 在数轴上有\(n\)个点(可以重合)和\(m\)条线段(可以重叠),你可以同时平 ...

  10. C++学习 之 变量和常量的使用(笔记)

    一.变量 1.对变量含义的理解: 变量就像是经过工厂加工后有一定容量的容器.在变量定义时,系统充当了工厂的角色,按照类型为变量分配相应的空间.定义完成的变量可以存放相应类型的值,存放的值大于变量所能接 ...