D. Distinct Characters Queries(set维护)

news2024/11/24 16:09:40

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.coloradmin.cn/o/126504.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

spring6(概念;ioc详解,各种数据的注入方式)

第一章 启示录 一个普通的三层架构&#xff0c;不借助spring的情况下。需要程序员自己去new对象。 如果使用这种方式&#xff0c;那么代码上就把功能写死了&#xff0c;这时候需要更改一个数据库连接。这是时候数据交互层的代码就需要修改。这违背了OCP开闭原则。 1.1 OCP开闭…

Bert 得到中文词向量

通过bert中文预训练模型得到中文词向量和句向量&#xff0c;步骤如下&#xff1a; 下载 bert-base-chiese模型 只需下载以下三个文件&#xff0c;然后放到bert-base-chinese命名的文件夹中 得到中文词向量的代码如下 import torch from transformers import BertTokenizer,…

can8.0-基础知识

1、canopen协议概述 1.1对象字典 CANopen 协议采用了带有 16 位索引和 8 位子索引的对象字典,对象字典的结构如表 1.2 常用的通信对象 1) 网络管理对象 (NMT) 2) 服务数据对象 (SDO) 3) 过程数据对象 (PDO) 4) 同步对象 (SYNC) 5) 紧急报文 (EMCY) 1.3 通信对象…

PISR 数据库,区块链和大数据的下一个最佳结合

据集合。如今&#xff0c;在大数据时代&#xff0c;数据管理越来越受到重视&#xff0c;已经成为一项非常重要的资产。因此&#xff0c;数据安全也变得越来越重要&#xff0c;应该引起重视。尽管现有数据库可以满足单个公司的存储依赖性&#xff0c;但它们很难确保公司之间协作…

React学习03-基于脚手架的React应用

初始化脚手架 使用 npx 创建 npx create-react-app 项目名使用 npm install 创建 全局安装create-react-app包&#xff1a; npm install -g create-react-app创建脚手架&#xff1a; create-react-app 项目名npm 镜像 执行 create-react-app时&#xff0c;还会自动安装一…

C++程序员学习资料汇总

小白入门 计算机网络微课堂&#xff08;有字幕无背景音乐版&#xff09; 非常适合小白学习&#xff0c;没有废话&#xff0c;非常生动 《计算机是怎样跑起来的》 《程序是怎样跑起来的》 《网络是怎样连接的》 基础 资料名备注状态阅读时间《深入理解计算机系统》很多大厂面…

实验室预约系统|基于Springboot+Vue实现学校实验室预约管理系统

作者主页&#xff1a;编程指南针 作者简介&#xff1a;Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容&#xff1a;Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助 收藏点赞不迷路 关注作者有好处 文末获取源…

JAVA中那些令人眼花缭乱的锁

一、开局一张图带你了解java相关的锁 二、乐观锁和悲观锁 1、悲观锁 悲观锁对应于生活中悲观的人&#xff0c;悲观的人总是想着事情往坏的方向发展。 举个生活中的例子&#xff0c;假设厕所只有一个坑位了&#xff0c;悲观锁上厕所会第一时间把门反锁上&#xff0c;这样其他…

python pyqtgraph绘图库

pyqtgraph官网 PyQtGraph被大量应用于Qt GUI平台&#xff08;通过PyQt或PySide&#xff09;&#xff0c;因为它的高性能图形和numpy可用于大量数据处理。 特别注意的是&#xff0c;pyqtgraph使用了Qt的GraphicsView框架&#xff0c;它本身是一个功能强大的图形系统; 我们将最优…

知识付费海哥:这样做课,不赚钱都难

现在不少人开始了开发网课&#xff0c;卖网课赚钱&#xff0c; 但是在网课开发时&#xff0c;很多人开始的时候&#xff0c;关注的点就错了&#xff01; 自己喜欢钓鱼&#xff0c;就开发钓鱼的课&#xff0c; 自己喜欢演讲&#xff0c;就开发演讲的课&#xff0c; 自己喜欢…

Dubbo入门(二)——IDEA下Dubbo+Zookeeper搭建

目录一、Zookeeper1.1 下载1.2 安装1.3 修改配置文件1.4 启动二、Dubbo插件搭建三、手动创建3.1 创建项目3.1.1 pom依赖3.2 api模块3.2.1 pom依赖3.2.2 实体类3.2.3 service接口3.3 provider3.3.1 pom依赖3.3.2 配置文件3.3.3 mapper3.3.4 service实现类3.3.5 启动类3.4 consum…

冶金工艺流程(钢铁全流程)

工艺图 工艺讲解 生产流程从矿石原料采集开始,对于低品位的矿石&#xff0c;必须在冶炼前经选矿工序先选出铁精矿&#xff0c;然后进一步制成烧结矿或球团矿。 ————————————————————————————— 高炉冶炼是一个连续的、大规模的高温生产过程。铁矿石…

为什么Aruba始终走在网络世界的前列?

编辑 | 阿冒 设计 | 沐由关于网络的价值&#xff0c;梅特卡夫定律&#xff08;Metcalfes law&#xff09;曾经在多年前就明白无误地告诉我们&#xff1a;VKN。其中&#xff0c;V代表一个网络的价值&#xff0c;N代表这个网络的节点数&#xff0c;K代表价值系数。如果梅特卡夫…

47. 批量规范化 代码从零开始实现 + 简洁实现

1. 从零实现 下面&#xff0c;我们从头开始实现一个具有张量的批量规范化层。 import torch from torch import nn from d2l import torch as d2l# X是输入&#xff0c;gamma, beta是两个可以学习的参数&#xff0c;moving_mean, moving_var是整个数据集的均值和方差&#xf…

ssh登录——scp传文件

一、ssh登录 1.基本用法 远程登录服务器&#xff1a; ssh userhostname# user: 用户名 # hostname: IP地址或域名 第一次登录时会提示&#xff1a; The authenticity of host 123.57.47.211 (123.57.47.211) cant be established. ECDSA key fingerprint is SHA256:iy237y…

十分钟掌握 “UML ” 的基本使用

十分钟掌握 “UML ” 的基本使用 每博一文案 很喜欢这样一段话&#xff1a;内可以不跟别人计较&#xff0c;但一定要学会维护自己&#xff0c;你可以不跟别人争抢&#xff0c;但应该懂得远离小人。 人生在世&#xff0c;我们会遇到形形色色的人&#xff0c;人心隔肚皮&#xf…

Pytorch深度学习实战——第3章课后习题

1.从list(range(9))list(range(9))list(range(9))中创建一个张量aaa并预测检查其大小、偏移量、步长。 import torch atorch.tensor(list(range(9))) print(a.storage_offset())#偏移量 print(a.stride())#步长 print(a.size())#大小a)使用ba.view(3,3)ba.view(3,3)ba.view(3,…

Aspose.PDF for Java系列3-创建复杂的PDF

创建复杂PDF 上篇文章展示了使用Java和Aspose.PDF简单步骤。本文中&#xff0c;我们将使用Java和Aspose.PDF创建更复杂的文档结构。此示例中&#xff0c;我们将创建包含图片、两个文本片段&#xff08;标题和段落&#xff09;和表格。 创建文档参考以下步骤&#xff1a; 实例…

被房地产坑惨的老板电器,终于要“回血”了!

近期&#xff0c;随着房地产行业重新被定义为“国民经济的支柱产业”&#xff0c;叠加疫情防控转向&#xff0c;笼罩在家电行业上空的阴霾逐渐消散&#xff0c;家电股预期改善&#xff0c;纷纷迎来估值修复。尤其是曾遭房地产暴击的老板电器&#xff0c;有望抓住房地产回暖的窗…

Synchronized

Synchronized前言1.synchronized修饰符和线程控制1.1synchronized修饰符和Object Monitor模式1.2 synchronized修饰符可标注的位置2. 方法2.1 waitwait多态表达式notify()方法和notifyAII()方法interrupt中断信号判断是否收到interrupt中断信号的方法前言 悲观锁在Java中有两种…