P1383 高级打字机

P1383 高级打字机

主席树

一发主席树解决。

插入操作十分显然。

撤销操作复制前面的版本就行。

询问操作十分显然。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define N 1000005
int n,lc[N],rc[N],rt[N],len[N],tot,k;
char a[N],p[3],z[3];
#define mid (l+r)/2
void update(int &o,int pre,int x,int l,int r){
    o=++tot;
    if(l>=r){scanf("%s",z);a[o]=z[0];return ;}
    lc[o]=lc[pre]; rc[o]=rc[pre];
    if(x<=mid) update(lc[o],lc[pre],x,l,mid);
    else update(rc[o],rc[pre],x,mid+1,r);
}
void ask(int o,int x,int l,int r){
    if(l>=r) {printf("%c\n",a[o]);return ;}
    if(x<=mid) ask(lc[o],x,l,mid);
    else ask(rc[o],x,mid+1,r);
}
int main(){
    scanf("%d",&n);
    for(int i=1,q;i<=n;++i){
        scanf("%s",p);
        if(p[0]==‘T‘){
            ++k;len[k]=len[k-1]+1;
            update(rt[k],rt[k-1],len[k],1,n);
        }else if(p[0]==‘Q‘) scanf("%d",&q),ask(rt[k],q,1,n);
        else if(p[0]==‘U‘){
            scanf("%d",&q);++k;
            len[k]=len[k-q-1];rt[k]=rt[k-q-1];//复制版本
        }
    }return 0;
}

原文地址:https://www.cnblogs.com/kafuuchino/p/10339700.html

时间: 2024-09-29 17:35:50

P1383 高级打字机的相关文章

洛谷 P1383 高级打字机==codevs 3333 高级打字机

P1383 高级打字机 18通过 118提交 题目提供者yeszy 标签倍增图论高级数据结构福建省历届夏令营 难度省选/NOI- 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:

【Luogu】P1383高级打字机

可持久化线段树模板题之一. 权当温习主席树模板 #include<cstdio> #include<cstdlib> #include<cctype> #define left (rt<<1) #define right (rt<<1|1) #define mid ((l+r)>>1) #define lson l,mid,left #define rson mid+1,r,right inline long long read(){

洛谷 P1383 codevs 3333 高级打字机

题目描述 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. 输入输出格式 输入格式: 第1行:一个整数n,表示操作数量. 以下n行,每行一个命令.保证输入的命令合法

高级打字机

[题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. [输入格式] 第1行:一个整数n,表示操作数量. 以下n行,每行一个命令.保证输入的命令合法. [输

codevs 3333 高级打字机

时间限制: 1 s 空间限制: 256000 KB 题目等级 : 大师 Master 题目描述 Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空

【伪&#183;题解】高级打字机

Problem 1 高级打字机(type.cpp/c/pas) [题目描述] 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. [输入格式] 第1行:一个整数n,表

[模拟赛] T1 高级打字机

Description 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开始可以视为空串. Input 第1行:一个整数n,表示操作数量. 以下n行,每行一个命令.保证输入的命令合法

做题单

错误 收藏了过多题目 QWQ P1383 高级打字机 P1270 “访问”美术馆 P1481 魔族密码 P1280 尼克的任务 P1271 聚会的快乐 P3631 [APIO2011]方格染色 P1243 排序集合 P2858 [USACO06FEB]奶牛零食Treats for the Cows P3146 [USACO16OPEN]248 P2890 [USACO07OPEN]便宜的回文Cheapest Palindrome P1896 [SCOI2005]互不侵犯 P3154 [CQOI2

COJ2152至2177(除2173)

高级打字机 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 早苗入手了最新的高级打字机.最新款自然有着与以往不同的功能,那就是它具备撤销功能,厉害吧. 请为这种高级打字机设计一个程序,支持如下3种操作: 1.T x:在文章末尾打下一个小写字母x.(type操作) 2.U x:撤销最后的x次修改操作.(Undo操作) (注意Query操作并不算修改操作) 3.Q x:询问当前文章中第x个字母并输出.(Query操作) 文章一开