codeforce452DIV2——F. Letters Removing
题意:
给一个字符串和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的更多相关文章
- 【CodeForces】899 F. Letters Removing
[题目]F. Letters Removing [题意]给定只含小写字母.大写字母和数字的字符串,每次给定一个范围要求删除[l,r]内的字符c(l和r具体位置随删除变动),求m次操作后的字符串.n&l ...
- Codeforces 899 F. Letters Removing (二分、树状数组)
题目链接:Letters Removing 题意: 给你一个长度为n的字符串,给出m次操作.每次操作给出一个l,r和一个字符c,要求删除字符串l到r之间所有的c. 题解: 看样例可以看出,这题最大的难 ...
- Codeforces Round #452 F. Letters Removing
Description Petya has a string of length n consisting of small and large English letters and digits. ...
- codeforces 899F Letters Removing set+树状数组
F. Letters Removing time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 899F - Letters Removing
Codeforces 899F - Letters Removing 思路:考虑一下怎么找到输入的l和r在原来串中的位置,我们想到用前缀和来找,一开始所有位置都为1,删掉后为0,那么前缀和为l的位置就 ...
- Codeforces 889F Letters Removing(二分 + 线段树 || 树状数组)
Letters Removing 题意:给你一个长度为n的字符串,然后进行m次删除操作,每次删除区间[l,r]内的某个字符,删除后并且将字符串往前补位,求删除完之后的字符串. 题解:先开80个set ...
- Letters Removing CodeForces - 899F (线段树维护序列)
大意: 给定字符串, 每次删除一段区间的某种字符, 最后输出序列. 类似于splay维护序列. 每次删除都会影响到后面字符的位置 可以通过转化为查询前缀和=k来查找下标. #include <i ...
- CF899F. Letters Removing
给一个字符串支持以下操作:区间删除某个特定字符.最后输出字符串.n,m<=200000. 这题我居然不会可以回家了.. 首先,单点删除,选个平衡树比如set. 然后,他给的下标是会随删除操作变化 ...
- Codeforces 899F Letters Removing 线段树/树状数组
虽然每次给一个区间,但是可以看作在区间内进行数个点操作,同样数列下标是动态变化的,如果我们将每个字符出现看作1,被删除看作0,则通过统计前缀和就能轻松计算出两个端点的位置了!这正是经典的树状数组操作 ...
随机推荐
- android知识点大总结
1.掌握Android编程的基本概念与要点,Android SDK及其开发环境搭建.Android项目结构分析.2.Android 应用设计模式.文件系统.3.文件形式的数据存储与访问.SDCard卡 ...
- I.MX6 AR8031 寄存器操作
/*************************************************************************** * I.MX6 AR8031 寄存器操作 * ...
- 迁移 Windows 上 Oracle 11.2.0.3.0 到 Linux 上 Oracle 11.2.0.3.0
一.迁移前数据库基本信息统计 查看数据库版本 SELECT * FROM V$VERSION; /* Oracle Database 11g Enterprise Edition Release 11 ...
- TortoiseGit不同分支合并代码
现在有主分支master和分支day2.现在要把day2上的变更合并到主分支master上! 1.首先切换到目标分支master上. 说明当前分支是master分支. 2.在master分支上查看提交 ...
- gitlab pipelines 使用
1. 安装runner # For Debian/Ubuntu curl -L https://packages.gitlab.com/install/repositories/runner/gi ...
- FastAdmin 在线命令生成时出错的分析
FastAdmin 在线命令生成时出错的分析 出错现象 版本环境 FastAdmin 版本:1.0.0.20180806_beta 在线命令插件版本:1.0.3 分析 2018-08-13 16:12 ...
- Toolbar使用
原文地址 http://www.cnblogs.com/Dentist/p/4370176.html Android4.0出现的Actionbar提供了同意方便的导航管理.很大程度的统一了Androi ...
- 定时任务&&找出两个list的不同
/*-------------------------application-context.xml------------------------------*/ <?xml version= ...
- 老齐python-基础1
1.基本对象类型 1.1数: >>> 3 #基本数字 3 >>> 3333 3333 >>> 3.222 3.222 >>&g ...
- xunsearch全文检索初体验
目录 测试添加数据 测试搜索 简单搜索 稍微复杂的搜索 搜索建议 测试添加数据 ./Indexer.php --source=csv --clean demo 清空现有索引数据 ... 初始化数据源 ...