紫薯例题

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+,inf=0x3f3f3f3f;
int rt[N],siz[N*],ch[N*][],tot,n,d,ver;
char buf[N],val[N*];
#define l(u) ch[u][0]
#define r(u) ch[u][1]
int rnd() {
const int M=(1ll<<)-,X=;
static int seed=time()%M;
return seed=(ll)seed*X%M;
}
int newnode(char c) {int u=++tot; siz[u]=,l(u)=r(u)=,val[u]=c; return u;}
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;}
void pu(int u) {siz[u]=siz[l(u)]+siz[r(u)]+;}
void sp(int w,int k,int& u,int& v) {
if(!w) {u=v=; return;}
if(k<=siz[l(w)])v=cpy(w),sp(l(w),k,u,l(v)),pu(v);
else u=cpy(w),sp(r(w),k-(siz[l(w)]+),r(u),v),pu(u);
}
void mg(int& w,int u,int v) {
if(!u||!v) {w=u|v; return;}
if(rnd()%(siz[u]+siz[v])<siz[u])w=u,mg(r(w),r(u),v);
else w=v,mg(l(w),u,l(v));
pu(w);
}
void build(int& u,int l,int r) {
if(l>r) {u=; return;}
int mid=(l+r)>>;
u=newnode(buf[mid]);
build(l(u),l,mid-),build(r(u),mid+,r),pu(u);
}
void ins(int& rt,int p) {
int n=strlen(buf);
int L,M,R;
build(M,,n-);
sp(rt,p,L,R),mg(L,L,M),mg(rt,L,R);
}
void del(int& rt,int p,int c) {
int L,M,R;
sp(rt,p+c-,L,R),sp(L,p-,L,M),mg(rt,L,R);
}
void dfs(int u) {
if(!u)return;
dfs(l(u)),putchar(val[u]),dfs(r(u));
if(val[u]=='c')++d;
}
void pr(int& rt,int p,int c) {
int L,M,R;
sp(rt,p+c-,L,R),sp(L,p-,L,M);
dfs(M),puts("");
mg(L,L,M),mg(rt,L,R);
}
int main() {
scanf("%d",&n);
for(int i=; i<=n; ++i) {
int f;
scanf("%d",&f);
if(f==) {
int p;
scanf("%d%s",&p,buf),p-=d;
++ver,ins(rt[ver]=rt[ver-],p);
} else if(f==) {
int p,c;
scanf("%d%d",&p,&c),p-=d,c-=d;
++ver,del(rt[ver]=rt[ver-],p,c);
} else {
int v,p,c;
scanf("%d%d%d",&v,&p,&c),v-=d,p-=d,c-=d;
pr(rt[v],p,c);
}
}
return ;
}

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. 正说PropertyValuesProvider的应用

    Github地址:https://github.com/andyslin/spring-ext 编译.运行环境:JDK 8 + Maven 3 + IDEA + Lombok spring-boot: ...

  2. DOM事件练习 I

    目录 input框动态显示事件 红绿灯模拟 顶部广告栏关闭 鼠标悬停IMG上时,更换另一张图片 悬浮框自动出现 模态框案例 input框动态显示事件 <head> <meta cha ...

  3. PJzhang:URL重定向漏洞的72般变化

    猫宁!!! 反射型xss的利用可以给对方发送钓鱼链接,窃取对方cookie,进入对方账户.   利用url重定向漏洞,发送给对方一个钓鱼链接,重定向到一个恶意网页,比如一个假的银行网站,被盗取账号密码 ...

  4. Star all over again.

    0x00前言 经过了一上午的折腾之后,博客的界面勉强可观,今天下午将之前的所有博客全部删除,重新开始写属于自己的博客,而不是只把它当作一个收藏夹,转载其他人的文章. 0x01近来感想 有感而发,随便写 ...

  5. 【Linux开发】Linux模块机制浅析

    Linux允许用户通过插入模块,实现干预内核的目的.一直以来,对linux的模块机制都不够清晰,因此本文对内核模块的加载机制进行简单地分析. 模块的Hello World! 我们通过创建一个简单的模块 ...

  6. Git 发生Another git process seems to be running in this repository, e.g. an editor opened by 'git commit'.错误

    Git 发生 Unable to create 'D:/Model/test/.git/index.lock': File exists. Another git process seems to b ...

  7. C++拷贝构造函数:浅拷贝与深拷贝

    在介绍C++浅拷贝与深拷贝之前,我们先引出C++的拷贝构造函数. C++拷贝构造函数是一种特殊的构造函数,其形参是本类对象的引用.用于在建立一个新的对象时,使用一个已经存在的对象来初始化这个新对象.因 ...

  8. 实现一台Linux电脑连接另一台Linux(SSH实现linux之间的免密码登陆)

    怎么实现一台Linux电脑连接另一台Linux电脑? 首先查看是否安装ssh服务:systemctl status sshd.service 启动服务:systemctl start sshd.ser ...

  9. unittest之三:字符串与列表的相互转换与分离数据时的应用

    一.分离数据时,需读取文档中存储的数据,但TXT文件的数据读取出来的类型为列表,而测试用例中断言的时候验证的是字符串,所以需要将列表转为字符串 #1字符串————>列表 str1='hello ...

  10. 客户端相关知识学习(二)之h5与原生app交互的原理

    前言 现在移动端 web 应用,很多时候都需要与原生 app 进行交互.沟通(运行在 webview中),比如微信的 jssdk,通过 window.wx 对象调用一些原生 app 的功能.所以,这次 ...