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,则通过统计前缀和就能轻松计算出两个端点的位置了!这正是经典的树状数组操作 ...
随机推荐
- Windows GVLK密钥对照表(KMS激活专用
以下key来源于微软官网:https://technet.microsoft.com/en-us/library/jj612867.aspx Windows Server 2016 操作系统 KMS激 ...
- ADO.Net入门(2)
(转载) 作者:可米小子 出处:http://liuhaorain.cnblogs.com 1. 什么是连接池? 在上篇文章<你必须知道的ADO.NET(四) 品味Connection对象> ...
- 2017 山东二轮集训 Day7 国王
2017 山东二轮集训 Day7 国王 题目大意 给定一棵树,每个点有黑白两种颜色,定义一条简单路径合法当且仅当路径上所有点黑色与白色数量相等,求有多少非空区间 \([L,R]\) ,使得所有编号 \ ...
- SSM框架——Spring+SpringMVC+Mybatis的搭建
1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One ...
- H5打字机特效
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Mac各个文件夹表示的意思
ca参考链接:http://www.jb51.net/os/MAC/130901.html
- 为什么新生代内存需要有两个Survivor区?
对于常见的GC算法,我们都应该知道,例如:标记清除算法.复制算法.标记整理算法等.标记清除算法由于回收之后存在大量的内存碎片,存在效率和空间问题!为了解决效率问题,引出了复制算法!熟悉GC算法的小伙伴 ...
- 【转】Python自动化测试 (一) Eclipse+Pydev 搭建开发环境
原文网址:http://www.cnblogs.com/TankXiao/archive/2013/05/29/3033640.html C#之所以容易让人感兴趣,是因为安装完Visual Studi ...
- 1020. Tree Traversals (25) ——树的遍历
//题目 通过后续遍历 中序遍历 得出一棵树 ,然后按树的层次遍历打印 PS:以前对于这种用指针的题目是比较头痛的,现在做了一些链表操作后,感觉也不难 先通过后续中序建一棵树,然后通过BFS遍历这棵树 ...
- Android的移动存储解决方案之SharedPreferences
搞Android有一段时间了,但是并没写过有关Android的博客,今天给大家介绍一下SharedPreferences. 使用SharedPreferences保存key-value对的步骤如 ...