CF1234D
CF1234D
链接:
https://codeforces.com/problemset/problem/1234/D
题目大意:
给你一个字符串s,你需要完成如下q次询问
- 把 s 的第 p 位改为 c。输入中表述为
1 p c
- 求 s 从 l 到 r 出现了多少种不同字符。在输入中表述为
2 l r
。
所有字符都是小写字母并且:
\]
思路:
遇到此类查询与修改问题,首先不能想着去暴力,该题目暴力的复杂度可达1e10,是不可观的,我们发现不同字符,最多也就26种,所以对于这种统计不同字符的题目,一种比较好的解题思路是分桶,26个字母26个桶,对每个桶逐一操作;
如何实现这两个操作?,这道题有两种办法,一种是树状数组/线段树,另一种是set+二分(STL大法),下面代码与思路用的是set+二分的方法,
修改操作: 对于每个修改前字符的桶 erase掉的这个位置p,对于修改的字符的桶加入这个位置p
查询操作: 对每个桶的set二分,因为set是单调的支持二分,二分他的lower_bound(l),也就是第一个比l大或者等于的位置,判断这个位置是否超过R,如果没有超过,说明该字符在区间内,可以计数器++
代码:
set<int> pos[26];
void solve(){
string s;
cin >> s;
int n = s.size();
s = " " +s;
for(int i = 1;i<=n;i++){
pos[s[i]-'a'].insert(i);
}
int q;
cin >> q;
while(q--){
int op;
cin >> op;
if(op==2){
int l,r;
cin >> l >> r;
int cnt = 0;
for(int i = 0; i < 26;i++){
auto id = pos[i].lower_bound(l);
if(id==pos[i].end()) continue;
if(*id<=r) cnt++;
}
cout <<cnt << endl;
}else{
int idx;
char c;
cin >> idx >> c;
int yb = s[idx];
pos[yb-'a'].erase(idx);
pos[c-'a'].insert(idx);
s[idx] = c;
}
}
}
时间复杂度:
O(m * log(n))
随机推荐
- CLR via C# 笔记 -- 字符、字符串、文本处理(14)
1. 字符串一经创建,便不能以任何方式修改,只能修改引用. 2. ToLowerInvariant() 和 ToUpperInvariant() 以忽略语言文化的方式将字符串转换为小写或大写形式.性能 ...
- springboot使用mail提示没有该类型的bean
@Autowired private JavaMailSenderImpl javaMailSender; 自动注入时提示没有该类型的Bean. 原因 没有配置邮件发送相关的配置信息. spring: ...
- 实验9.单臂路由实现Vlan互通实验
# 单臂路由实现Vlan互通实验 本实验用于测试单臂路由方式实现Vlan路由. 实验组 实验过程 SW int g0/0/1 port link-type access port default vl ...
- centos7中的nohup和&的用法和区别
1.&和nohup的区别 &的意思是在后台运行, 意思是说, 当你在执行 ./start.sh & 的时候, 即使你用ctrl C, 那么start.sh照样运行(因为对SIG ...
- 【Mysql】 MysqlDump导表结构或数据
mysqldump只导出表结构或只导出数据的实现方法 语法: 默认不带参数的导出,导出文本内容大概如下:创建数据库判断语句-删除表-创建表-锁表-禁用索引-插入数据-启用索引-解锁表. Usage: ...
- 使用docker搭建ELK分式日志同步方案
ELK作为业界最常用日志同步方案,我们今天尝试一下使用docker快速搭建一套ELK方案.ELK使用国内加速源拉取的镜像比较旧,有条件的朋友可以拉取官网的源.elasticsearch作为日志储存库( ...
- JDK各个版本汇总
JDK1.4 正则表达式,异常链,NIO,日志类,XML解析器,XLST转换器 JDK1.5 自动装箱.泛型.动态注解.枚举.可变长参数.遍历循环 JDK1.6 提供动态语言支持.提供编译API和卫星 ...
- uBrand | 更适合个人创业者,小公司的AI品牌创建平台
在跟一些辞职创业的朋友聊品牌,这个问题大家不约而同地都会提到:"我不会设计也没有资金请专业的设计师,有没有低成本打造品牌的方法呢?" 正好这段时间赶上AI的风潮,从众多AI工具中刚 ...
- Serverless无服务应用架构纵横谈2:边缘计算激战正酣
Serverless无服务应用架构纵横谈2 前言 6年前,我写了一篇<Serverless无服务应用架构纵横谈>. 文中说到无论是公有云FaaS还是私有云FaaS,都不是云计算的未来. 因 ...
- Python爬虫(5-10)-编解码、ajax的get请求、ajax的post请求、URLError/HTTPError、微博的cookie登录、Handler处理器
五.编解码(Unicode编码) (1)GET请求 所提方法都在urllib.parse.路径下 get请求的quote()方法(适用于只提交一两个参数值) url='http://www.baidu ...