U423621 [HDK - NRC] Sqen Paradox

news/2024/10/12 14:19:22

[HDK - NRC] Sqen Paradox

题目描述

给定一个长度为 \(n\) 的数列 \(S\).

询问在给定区间 \([l,r]\) 内最长的没有重复元素的区间长度.

输入格式

第一行两个整数 \(n,m\).

第二行 \(n\) 个整数,描述数列 \(S\).

随后 \(m\) 行,每行一个询问.

输出格式

\(m\) 行,请你对每个询问操作输出一行答案.

样例 #1

样例输入 #1

5 3
1 2 3 3 4
1 3
2 4
1 5

样例输出 #1

3
2
3

提示

样例解释

  1. 询问 1 3 ,连续的最长区间为 \([1,3]\).

  2. 询问 2 4,区间为 \([2,3]\).

  3. 询问 1 5,区间为 \([1,3]\).

数据约定

输入数据满足 \(n,m\le 10^{5},S_{i}\le 10^{9}\).

解析

(以下做法来自 \(GGrun\)

题干很简单,乍一看线段树呀,分块呀等数据结构。

但其实这道题要简单的多。

既然 找"没有重复元素的"区间,那么我们可以维护一个类似前缀的东西。

也就是找出每个点能向左延长多少。

所以只需要找出最后一个出现重复的数据就好了。

如图,\(1...6\) 前面都没有和自己重复的,直到又碰到一个 \(4\)

\(7\) 前面虽然没有和自己重复的,但是前面有一对 \(4\) ,所以只能到 \(4\)

综上:记录一个 \(k\) ,表示 最大长度只能为 \(k+1...i\) ,和每一个数上一次出现的位置。

取最大值更新 \(k\) ,就好啦!

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+9;
int n,m,s[N],tot;
int cnt[N],qian[N];
map<int,int> mp;
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){scanf("%d",&s[i]);if(mp.find(s[i])==mp.end()) mp[s[i]]=++tot,s[i]=tot;else s[i]=mp[s[i]];}int k=0;for(int i=1;i<=n;i++){k=max(k,cnt[s[i]]); cnt[s[i]]=i; qian[i]=k;}while(m--){int ans=1;int x,y;scanf("%d%d",&x,&y);for(int i=x;i<=y;i++){ans=max(ans,i-max(x-1,qian[i]));}printf("%d\n",ans);}return 0;
}

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

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

相关文章

Hexo-Matery主题评论插件

matery主题集成了各种评论模块,例如 gitalk、gitment、disqus、livere、valine、waline、Twikoo、utteranc 等,但我使用最好的还是 utteranc 这种集成在github种的评论插件,并且能够做到github邮箱通知。 1. 新建一个评论仓库 首先创建一个公开的评论仓库<自定义名称>…

DHU网络攻防靶场攻击记录

DHU网络靶场攻击记录 已知:靶场入口10.199.227.xxx 不完整的网络拓扑图:环境准备:kali/wsl-kali/虚拟机kali以及windows或其他操作系统的本机 工具准备:Fscan nmap laravel-CVE-2021-3129-EXP-main 哥斯拉 Burpsuite msfconsole(主要)目录DHU网络靶场攻击记录如何挂代理入…

运算符重载

运算符重载 基本规则 可以重载的运算符:不可重载的运算符://返回类型 operator后面加运算符(参数列表) //eg. Integer operator+(Integer l, Integer r);class Integer{ public:Integer(int n = 0) : i(n) {}const Integer operator+(const Integer& v){ //在类中定义运…

图的概念、存储与遍历

相关概念图 (graph) 是一个二元组 \(G=(V(G),E(G))\)。其中 \(V(G)\) 是非空集,称为 点集 (vertex set),对于 \(V\) 中的每个元素,我们称其为 顶点 (vertex) 或 节点 (node),简称 点;\(E(G)\) 为 \(V(G)\) 结点之间边的集合,称为 边集 (edge set)。 ​ …

基于SSM的仓库进销存系统毕业设计论文【范文】

摘要 随着信息技术的不断发展,企业对于仓储管理的要求日益提高。为了提升仓库管理的自动化和智能化水平,本研究设计并实现了一个基于Spring、Spring MVC和MyBatis (SSM) 框架的在仓库进销存系统。该系统旨在为企业提供一个高效、准确、实时的库存管理解决方案,以优化库存控制…

FreeRTOS任务通知

FreeRTOS任务通知 FreeRTOS 新增了任务通知(Task Notifictions)这个功能,可以使用任务通知来代替信号量、消息队列、事件标志组等这些东西。使用任务通知的话效率会更高,任务通知在 FreeRTOS 中是一个可选的功能, 使用队列、信号量、事件标志组时都需另外创建一个结构体,通…