D. Distinct Characters Queries(set维护)

news/2024/11/18 2:30:35/

Problem - 1234D - Codeforces

 

给你一个由小写拉丁字母组成的字符串s和对这个字符串的q个查询。

回顾一下,字符串s的子串s[l;r]就是字符串slsl+1...sr。例如,"codeforces "的子串是 "code"、"force"、"f"、"for",但不是 "coder "和 "top"。

有两种类型的查询。

1 pos c (1≤pos≤|s|,c为小写拉丁字母):用c替换 spos (set spos:=c)。
2 l r (1≤l≤r≤|s|):计算子串s[l;r]中不同字符的数量。
输入
输入的第一行包含一个由不超过105个小写拉丁字母组成的字符串s。

输入的第二行包含一个整数q(1≤q≤105)--查询的数量。

接下来的q行包含查询,每行一个。每个查询都是按照问题陈述中描述的格式给出的。保证至少有一个第二种类型的查询。

输出
对于每一个第二种类型的查询,打印出它的答案--在这个查询中所要求的子串中的明显字符数。

例子
inputCopy
abacaba
5
2 1 4
1 4 b
1 5 b
2 4 6
2 1 7
输出拷贝
3
1
2
输入拷贝
dfcbbcfeeedbaea
15
1 6 e
1 4 b
2 6 14
1 7 b
1 12 c
2 6 8
2 1 6
1 7 c
1 2 f
1 10 a
2 7 9
1 10 a
1 14 b
1 1 f
2 1 11
输出拷贝
5
2
5
2
6

题解:

用set存储每个字母的下标

每次要修改时就把当前s[i]的中的下标删去

再把要修改的字母把下标插入

更改此时的s[i] = c

如果要查询,我们直接进性26次二分找存储在当前字母中的下标是在l~r内

注意set.end()并不是存储数的最后一位

#include<iostream>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<cstring>
#include<cmath>
#include<set>
using namespace std;
#define int long long
typedef pair<int,int> PII;
char a[200050];
set<int> st[27];
void solve()
{cin >> a+1;int n = strlen(a+1);for(int i  =1;i <= n;i++){st[a[i]-'a'].insert(i);}int q;cin >> q;while(q--){int p ;cin >>p;if(p == 1){int x;char c;cin >> x >> c;st[a[x]-'a'].erase(x);st[c-'a'].insert(x);a[x] = c;		}else{int l,r;cin >> l >> r;int s = 0;for(int j = 0;j < 26;j++){auto p = st[j].lower_bound(l);if(p!=st[j].end()&&*p <= r){s ++;}}cout << s<<"\n";}}
}
//cbc cbb
//7 3 1
//6 5 4 
signed main(){
//	ios::sync_with_stdio(false);
//	cin.tie(0);
//	cout.tie(0);int t = 1;
//	cin >> t;while(t--){solve();} 
}
//5
//2 4 6 8 10 7 9 5 3 1
//1 3 5 7 9 6 8 4 2
//2 4 1 3


http://www.ppmy.cn/news/7609.html

相关文章

Linux系统运行时参数命令--网络IO性能监控

目录 5 网络IO性能监控 5.1 性能指标 5.2 网络信息 5.2.1 套接字信息 5.2.2 协议栈统计信息-netstat命令 5.2.3 网络吞吐-sar命令 5.2.4 连通性和延时 5.3 其他常用的网络相关命令 telnet nc mtr连通性测试 nslookup traceroute iptraf强大的网络监控 tcpdump- …

大数据教学实训沙盘介绍

沙盘的作用主要有3个&#xff1a; 1、采集真实数据&#xff0c;解决教学中缺少真实数据的困扰&#xff1b; 2、形成从数据采集、预处理、挖掘建模、模型部署的业务闭环&#xff0c;可以把构建模型发布到沙盘系统上&#xff0c;根据模型产生真实的反馈不断的修正模型精度&#x…

RK3568平台开发系列讲解(Linux系统篇)Linux 管道的使用

🚀返回专栏总目录 文章目录 一、 管道1.1、单向管道1.2、双向管道沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍管道的使用。 一、 管道 在 fork() 成功创建子进程之后,已经打开的文件描述符在父子进程间是共享的,管道就是利用这一特性来工作的。 创建…

爽啊,这么多有趣好玩强大的 Python 库

Python语言简洁、易读以及可扩展&#xff0c;在国内外用 Python 做研究的非常多。 Python 语言向来以丰富的第三方库而闻名。这么多有趣好玩且强大&#xff0c;靠一个人去寻找太难了。 最近粉丝群小伙伴们又罗列了一些&#xff0c;分享给大家。喜欢记得点个赞&#xff0c;加入…

整合Tkinter GUI界面的古诗词词云生成

Python语言提供的wordcloud词云功能&#xff0c;使文本数据的可视化&#xff0c;简单而美丽。但网上的大多数词云生成功能&#xff0c;多半没有可交互的GUI界面&#xff0c;使用起来稍觉不便。笔者结合网上的中文词云功能&#xff0c;以唐诗三百首&#xff0c;宋词三百首&#…

为远程MySQL数据库配置固定的公网TCP地址【内网穿透】

在上篇文章中&#xff0c; 我们成功实现了在公网环境下远程连接内网MySQL数据库。但由于使用的免费的cpolar内网穿透&#xff0c;其所生成的公网地址为随机临时地址&#xff0c;24小时内会发生变化&#xff0c;对于需要长期远程访问的用户来讲非常不方便。因此&#xff0c;本篇…

Qt+C++ TCP发送接收信息客户端与服务端窗体

程序示例精选 QtC TCP发送接收信息客户端与服务端窗体 如需安装运行环境或远程调试&#xff0c;见文章底部微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC TCP发送接收信息客户端与服务端窗体>>编写代码&#xff0c;代码整洁&am…

java比较器

一、说明: Java中的对象&#xff0c;正常情况下&#xff0c;只能进行比较: 或 ! 。不能使用 >或 如何实现? 使用两个接口中的任何一个: Comparable 或 Comparator 二、Comparable的使用(自然排序) 1.Comparable接口的使用举例: 1.像string、包装类等实现了Comparable接口…