【小DS】ABC250 E - Prefix Equality

news2024/11/20 9:20:15

一开始看题解把我CPU干烧了

后来豁然开朗

E - Prefix Equality (atcoder.jp)

题意:

给定两个数组a,b,每次询问两个位置x和y,问a数组前x个构成的集合和b数组前y个构成的集合是不是一样

思路:

一开始纯暴力RE了

#include <bits/stdc++.h>

using namespace std;

const int mxn=2e5+10;
const int mxe=2e5+10;

set<int> S1[mxn],S2[mxn];

int N,Q,x,y;
int a[mxn],b[mxn];

signed main(){
	cin>>N;
	for(int i=1;i<=N;i++) cin>>a[i];
	for(int i=1;i<=N;i++) cin>>b[i];
	S1[1].insert(a[1]);
	S2[1].insert(b[1]);
	for(int i=2;i<=N;i++){
		S1[i]=S1[i-1];
		S1[i].insert(a[i]);
	}
	for(int i=2;i<=N;i++){
		S2[i]=S2[i-1];
		S2[i].insert(b[i]);
	} 
	cin>>Q;
	while(Q--){
		cin>>x>>y;
		if(S1[x]==S2[y]) cout<<"Yes"<<'\n';
		else cout<<"No"<<'\n';
	}	
}

 正解需要转化一下条件

(当没有思路的时候,关注题目的特殊条件和转化一下题目给的一般条件,这里没有特殊性质就去转化给定的一般条件)

它说a数组前x个构成的集合和b数组前y个构成的集合要一样

等效一下就是

a数组中1~x这些元素在b数组中出现的最晚位置要<=y

b数组中1~y这些元素在a数组中出现的最晚位置要<=x

因此DS的部分就来了!

我们需要维护两个东西:

a数组中1~x这些元素在b数组中出现的最晚位置

b数组中1~y这些元素在a数组中出现的最晚位置

那么怎么维护呢,我们去考虑修改部分

虽然这道题没有明显的修改操作,但是在遍历1~x的时候,每新加一个a[i] or b[i],就相当于是“修改”操作(这是常见的套路)

考虑新加了一个a[i],对“b数组中1~y这些元素在a数组中出现的最晚位置”会产生什么影响呢?

考虑转移

设pre_a数组为b[i]在a数组中出现的最晚位置,在遍历过程中维护这个数组

这里有点小小的贪心,我们希望出现的最晚位置尽可能前面,因此去维护一个数x在a数组中出现的最早位置,这样就能按以下转移:

如果说x在数组中没出现过,那么在该数组中出现的最晚位置就是Inf

然后这道题就做完了

感觉很帅啊

Code:

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int mxn=2e5+10; 
const int Inf=1e18;

map<int,int> mp_a,mp_b;

int N,Q,x,y;
int a[mxn],b[mxn];
int pre_a[mxn],pre_b[mxn];

signed main(){
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>N;
	for(int i=1;i<=N;i++) cin>>a[i];
	for(int i=1;i<=N;i++) cin>>b[i];
	for(int i=1;i<=N;i++){
		if(!mp_a[a[i]]) mp_a[a[i]]=i;
		if(!mp_b[b[i]]) mp_b[b[i]]=i;
	}
	for(int i=1;i<=N;i++){
		//b[i]在a中的最晚出现位置 
		pre_a[i]=max(pre_a[i-1],mp_a[b[i]]?mp_a[b[i]]:Inf);
		//a[i]在b中的最晚出现位置
		pre_b[i]=max(pre_b[i-1],mp_b[a[i]]?mp_b[a[i]]:Inf); 
	}
	cin>>Q;
	while(Q--){
		cin>>x>>y;
		if(pre_b[x]<=y&&pre_a[y]<=x) cout<<"Yes"<<'\n';
		else cout<<"No"<<'\n';
	}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/450893.html

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

相关文章

IDEA 重磅插件 - Bito – GPT-4

笔者会陆续在个人主页 “AI” 专栏推荐优质 AI 软件、插件、网站… 而不是一股脑地抛给你一堆自行筛选&#xff0c;每一款都是笔者亲自体验感觉还不错的。 如果对你有帮助记得一键三连获取最新优质文章&#xff01; 1.介绍 Bito – GPT-4 Bito – GPT-4 & ChatGPT to writ…

WiFi 时钟

WiFi 时钟有很多开源项目的。但是&#xff0c;成品往往代码一大篇&#xff0c;看起来有些上头。加上有些库和环境的版本变迁&#xff0c;编译报错排查起来很是费劲。于是从头捋一遍&#xff0c;一步一步的过程&#xff0c;容易上手&#xff1a; 准备工作&#xff1a; a 零件&…

Netty源码解读

Netty源码解读 Netty线程模型 1、定义了两组线程池BossGroup和WorkerGroup&#xff0c;BossGroup专门负责接收客户端的连接, WorkerGroup专门负责网络的读写 2、BossGroup和WorkerGroup类型都是NioEventLoopGroup&#xff0c;Group中维护了多个事件循环线程NioEventLoop&#…

AI新产品层出不穷,学不过来怎么办。

最近各个互联网巨头和创业新贵发布的AI工具&#xff0c;AI模型层出不穷&#xff0c;相关自媒体的热度也都很高&#xff0c;当然&#xff0c;各种大佬的隔空喊话也是非常吸引眼球&#xff0c;那么很多人就会觉得&#xff0c;要看的东西太多了&#xff0c;要学的东西太多了&#…

【数据结构】顺序表详解(附leetcode练习题)

☃️个人主页&#xff1a;fighting小泽 &#x1f338;作者简介&#xff1a;目前正在学习C语言和数据结构 &#x1f33c;博客专栏&#xff1a;数据结构 &#x1f3f5;️欢迎关注&#xff1a;评论&#x1f44a;&#x1f3fb;点赞&#x1f44d;&#x1f3fb;留言&#x1f4aa;&…

Java编译器插件Manifold(流形)

流形 文天祥正气歌中有云&#xff1a;“天地有正气&#xff0c;杂然赋流形”。 流形是一种抽象而又具体的事务&#xff0c;要研究一个事务就要格物&#xff0c;不格物就不能知道事物的具体描绘形式。流形大多数情况下是一种数学计算方式&#xff0c;可以将一个复杂的模型抽象…

Matplotlib Pyplot

Pyplot 是 Matplotlib 的子库&#xff0c;提供了和 MATLAB 类似的绘图 API。 Pyplot 是常用的绘图模块&#xff0c;能很方便让用户绘制 2D 图表。 Pyplot 包含一系列绘图函数的相关函数&#xff0c;每个函数会对当前的图像进行一些修改&#xff0c;例如&#xff1a;给图像加上…

ChatGPT | 申请与使用new bing的实用教程

1. 教程参考&#xff1a; https://juejin.cn/post/7199557716998078522 2.在参考上述教程遇到的问题与解决 2.1 下载dev浏览器的网址打不开 egde dev下载地址&#xff08;上面网站上的&#xff09;我电脑打不开 换用下面的网址即可 https://www.microsoftedgeinsider.com/z…

给定一个正整数字符串,使用Python正则表达式在其千分位上添加逗号

点击上方“Python爬虫与数据挖掘”&#xff0c;进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 楼阁玲珑五云起&#xff0c;其中绰约多仙子。 大家好&#xff0c;我是皮皮。 一、前言 前几天在Python黄金青铜群【沐】问了一个Python正则表达式的问题…

MySQL开发工具评测,包含了Navicat、DBeaver、SQL Studio等12种

面对五花八门的MySQL客户端,开发者该如何选择,今天我整理了12种MySQL开发工具,从产品体验,功能完整度,云适配,计费模式,OS先容性等多个角度进行评估与分析,大家可根据自己的实际情况选择![在这里插入图片描述](https://img-blog.csdnimg.cn/56bdfc89afe743b9b87477d7c0521023.p…

SAP KANBAN 从入门到放弃系列之调拨模式

之前已经有三篇文章写了后台配置相关的介绍&#xff0c;这里不赘述。详见&#xff1a; PP-KANBAN-看板概述 SAP KANBAN 从入门到放弃系列之生产补货模式 SAP KANBAN 从入门到放弃系列之采购补货模式 第一步&#xff1a;补货策略-转库。不同的补充策略的控制类型有不同的作用…

【vue2 pc端】下拉滑动加载更多 vue-data-loading

官网地址 页面项目中使用 <template><!-- 空数据时显示 --><div class"nonono"><img src"/assets/img/404_cloud.png" alt"" v-if"goodslist.length < 0" class"nonnonoimg"></div>&…

燃气管道定位83KHZ地下电子标识器探测仪ED-8000操作指南

1、电子标识器探测工作 燃气管道定位83KHZ地下电子标识器探测仪ED-8000&#xff0c;探测时周边 3 米范围内不能有其他探测仪&#xff0c;保持探测仪垂直向 下&#xff0c;探测仪的末端距离地面 5~10cm 左右&#xff0c;延估计的埋地管线走向水平移动探测仪。当发现持续信号且信…

反射-Class类分析

反射相关的主要类 java.lang.Class&#xff1a;代表一个类&#xff0c;Class对象表示某个类加载后在堆中的对象java.lang.reflect.Method&#xff1a;代表类的方法&#xff0c;Method对象表示某个类的方法java.lang.reflect.Field&#xff1a;代表类的成员变量&#xff0c;Fie…

有手就行——基础XGBoost实战以 iris 数据集为例

基础 XGBoost 实战以 iris 数据集为例 1、导入数据2、数据预处理3、分训练集和测试集4、训练模型构建5、测试集预测准确度6、构建混淆矩阵7、特征重要性 对于很多只是小小使用机器学习&#xff0c;而不是深入了解的人来说&#xff0c;了解各种原理可能是十分痛苦的&#xff0c;…

Gnuplot绘图入门2 快捷方式

Gnuplot绘图入门2——根据多列文本数据绘制图形 Gnuplot绘图入门1以绘制sin(x)的函数图形为例&#xff0c;对Gnuplot进行了简要介绍。这个教程将介绍如何使用Gnuplot对保存在文本文件&#xff08;.txt、.dat文件&#xff09;中的数据进行可视化。 将下面的数据复制下了&#…

Linux安装Nginx,源码安装及创建软连接

前言 Nginx是一个功能强大、高性能、可扩展、易用和安全的Web服务器和反向代理服务器&#xff0c;被广泛应用于企业级和互联网领域 可扩展性&#xff1a;Nginx可以通过添加各种模块和插件来扩展其功能&#xff0c;包括HTTP流控制、SSL加密、压缩和解压缩、访问控制等。 高可靠…

项目设计:迷宫游戏设计day3

一、界面制作 我用的easyx实现图形化界面&#xff0c;在制作第一个界面的时候&#xff0c;第一个界面的功能有开始游戏&#xff0c;退出游戏&#xff0c;排行榜&#xff08;虽然还没实现&#xff09; 那么首先还是得用一个图片贴在上面&#xff0c;这个图片是我自己画的&#…

20230419 生物基础学习- 氨基酸-密码子-突变

文章目录 名称形状密码子-氨基酸对应表简明中文英文和简称突变类型生物化学课程笔记特殊氨基酸的性质缬氨酸和甲硫氨酸 染色体 - RNA - 蛋白质 名称 Phenylalanine,Leucine,Isoleucine,Methionine,Valine,Serine,Proline,Threonine,Alanine,Tyrosine,Histidine,Glutamine,Aspa…

「 计算机网络 」HTTP和RPC的区别与联系

「 计算机网络 」HTTP和RPC的区别与联系 参考&鸣谢 HTTP 和 RPC 的区别 小十七_ Http协议和Rpc协议有什么区别&#xff1f; 俗人杂念 为什么要自研RPC框架&#xff1f;HTTP和RPC的区别 starine 既然有HTTP协议&#xff0c;为什么还要有RPC 小白debug 文章目录 「 计算机网络…