题意:
给一个字符串和m个操作,每次给出l,r,c,把字符串中l-r这段区间的字符为c的字符删掉,求最后的字符串。(n,m<=2e5)
线段树。注意这个区间修改和普通区间修改的区别。

他们都是用树状数组做的哎,可是我对树状数组一直是一脸懵逼

 #include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
const int maxn=+;
const int maxnode=;
int n,m;
char s[maxn];
int a[maxn];
int get(char c){
if(c>='A'&&c<='Z')return c-'A';
if(c>='a'&&c<='z')return c-'a'+;
if(c>=''&&c<='')return c-''+;
}
char res(int x){
if(x>=&&x<)return x+'A';
if(x>=&&x<)return x-+'a';
if(x>=&&x<)return x-+'';
}
int sumv[*maxn],num[*maxn][maxnode];
void build(int o,int L,int R){
if(L==R){
sumv[o]=;
num[o][a[L]]=;
return ;
}
int M=L+(R-L)/;
build(*o,L,M);
build(*o+,M+,R);
sumv[o]=sumv[*o]+sumv[*o+];
for(int i=;i<;i++)
num[o][i]=num[*o][i]+num[*o+][i];
}
int ql,qr,c;
void update(int o,int L,int R){
if(num[o][c]==)return ;
if(ql>R||qr<L)
return ;
if(L==R){
if(num[o][c]){
sumv[o]=;
num[o][c]=;
}
return ;
}
int M=L+(R-L)/;
update(*o,L,M);
update(*o+,M+,R);
sumv[o]=sumv[*o]+sumv[*o+];
num[o][c]=num[*o][c]+num[*o+][c];
}
int find(int o,int L,int R ,int k){
int M=L+(R-L)/;
if(L==R)return L;
if(sumv[*o]>=k)return find(*o,L,M,k);
else return find(*o+,M+,R,k-sumv[*o]);
}
void tra(int o,int L,int R){
if(sumv[o]==)return ;
if(L==R){
for(int i=;i<;i++)
if(num[o][i]){
int c=res(i);
printf("%c",c);
}
return ;
}
int M=L+(R-L)/;
tra(*o,L,M);
tra(*o+,M+,R);
}
int main(){
scanf("%d%d",&n,&m);
scanf("%s",s+);
for(int i=;i<=n;i++)a[i]=get(s[i]);
build(,,n);
int L,R;
char cc;
for(int i=;i<=m;i++){
scanf("%d%d %c",&L,&R,&cc);
L=find(,,n,L),R=find(,,n,R);
ql=L,qr=R,c=get(cc);
update(,,n);
}
tra(,,n);
return ;
}

codeforce452DIV2——F. Letters Removing的更多相关文章

  1. 【CodeForces】899 F. Letters Removing

    [题目]F. Letters Removing [题意]给定只含小写字母.大写字母和数字的字符串,每次给定一个范围要求删除[l,r]内的字符c(l和r具体位置随删除变动),求m次操作后的字符串.n&l ...

  2. Codeforces 899 F. Letters Removing (二分、树状数组)

    题目链接:Letters Removing 题意: 给你一个长度为n的字符串,给出m次操作.每次操作给出一个l,r和一个字符c,要求删除字符串l到r之间所有的c. 题解: 看样例可以看出,这题最大的难 ...

  3. Codeforces Round #452 F. Letters Removing

    Description Petya has a string of length n consisting of small and large English letters and digits. ...

  4. codeforces 899F Letters Removing set+树状数组

    F. Letters Removing time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  5. 899F - Letters Removing

    Codeforces 899F - Letters Removing 思路:考虑一下怎么找到输入的l和r在原来串中的位置,我们想到用前缀和来找,一开始所有位置都为1,删掉后为0,那么前缀和为l的位置就 ...

  6. Codeforces 889F Letters Removing(二分 + 线段树 || 树状数组)

    Letters Removing 题意:给你一个长度为n的字符串,然后进行m次删除操作,每次删除区间[l,r]内的某个字符,删除后并且将字符串往前补位,求删除完之后的字符串. 题解:先开80个set ...

  7. Letters Removing CodeForces - 899F (线段树维护序列)

    大意: 给定字符串, 每次删除一段区间的某种字符, 最后输出序列. 类似于splay维护序列. 每次删除都会影响到后面字符的位置 可以通过转化为查询前缀和=k来查找下标. #include <i ...

  8. CF899F. Letters Removing

    给一个字符串支持以下操作:区间删除某个特定字符.最后输出字符串.n,m<=200000. 这题我居然不会可以回家了.. 首先,单点删除,选个平衡树比如set. 然后,他给的下标是会随删除操作变化 ...

  9. Codeforces 899F Letters Removing 线段树/树状数组

    虽然每次给一个区间,但是可以看作在区间内进行数个点操作,同样数列下标是动态变化的,如果我们将每个字符出现看作1,被删除看作0,则通过统计前缀和就能轻松计算出两个端点的位置了!这正是经典的树状数组操作 ...

随机推荐

  1. Android内存优化(二)DVM和ART的GC日志分析

    相关文章 Android内存优化系列 Java虚拟机系列 前言 在Java虚拟机(三)垃圾标记算法与Java对象的生命周期这篇文章中,提到了Java虚拟机的GC日志.DVM和ART的GC日志与Java ...

  2. HihoCoder1127 二分图三·二分图最小点覆盖和最大独立集

    二分图三·二分图最小点覆盖和最大独立集 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在上次安排完相亲之后又过了挺长时间,大家好像都差不多见过面了.不过相亲这个事不是说 ...

  3. asp.net core microservices 架构之Task 事务一致性 事件源 详解

    一 aspnetcore之task的任务状态-CancellationToken 我有一篇文章讲解了asp.net的线程方面的知识.我们知道.net的针对于多线程的一个亮点就是Task,net clr ...

  4. 十九、python沉淀之路--装饰器

    一.实现装饰器的预备知识 装饰器 = 高阶函数 + 函数嵌套 + 闭包 1.高价函数定义: 1.函数接收的参数是一个函数名    2.函数的返回值是一个函数名    3.满足上述条件任意一个,都可称之 ...

  5. AUL恢复truncate删除的表

    背景 接到用户申告,新毕业的兄弟不小心把数据库中的3个关键表给truncate了,由于这个业务还在测试阶段,系统没有任何形式的备份. 客户的OS平台是windows平台,数据库是Oracle9207 ...

  6. vscode使用Markdown文档编写

    首先安装vscode工具,具体的使用可以参考之前的博文:<Visual Studio Code教程:基础使用和自定义设置> VScode已经默认集成markdown文档编辑插件.可以新建一 ...

  7. Python 函数 min()

    min() 函数 作用:  min() 方法返回给定参数的最小值,参数可以为序列.x-数值表达式.y-数值表达式.z-数值表达式.返回给定参数的最小值. 语法: min( x, y, z, .... ...

  8. asp select count(*) 用 open还是excute

    dSql1="select count(*) from test_hist where uid="&cid  'dRs1.open dSql1,tConn,1,1  'dS ...

  9. vs2003属性窗口空白的问题

    一个困扰很久的问题一直没有解决,因为vs的属性窗口没显示不方便修改mfc程序的id和属性等等,但是可以直接在代码里修改.问题始终是问题,最近准备画时间解决之,上网差资料搜索办法,一帖说是win7的问题 ...

  10. 详细的nginx.conf中文资料整理

    整理来源: https://blog.csdn.net/tjcyjd/article/details/50695922 整理结果 Nginx的配置文件nginx.conf配置详解如下: #Nginx用 ...