当前位置: 首页 > article >正文

CSES-1141 Playlist

题目传送门icon-default.png?t=O83Ahttps://vjudge.net/problem/CSES-1141

解题思路

遍历一下……

对于每一个 i,设 len_i 为以 i 为结尾的合法序列长度。

首先,在没有任何特殊情况下,易得 len_i=len_{i-1}+1

如果 a_i 之前出现过,那么这个连续序列里就有可能会有重复的数(所以就要判一下)。

设 last 为 a_i 上一次出现的位置。

若 last>=i-len_i+1,即在这个序列里,我们需要切掉前面重复之前的一截。

同时,动态更新 a_i 的位置,ans 取最大值。

代码

#include<bits/stdc++.h>
using namespace std;

int n,a[200001];
int len[200001];
map<int,int> flag;
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	int ans=0,last;
	for(int i=1;i<=n;i++)
	{
		len[i]=len[i-1]+1;
		if(flag[a[i]])
		{
			last=flag[a[i]];
			if(last>=i-len[i]+1)
				len[i]-=(last-(i-len[i]+1)+1);
		}
		flag[a[i]]=i;
		ans=max(ans,len[i]);
	}
//	for(int i=1;i<=n;i++)
//	{
//		cout<<len[i]<<" ";
//	}
	cout<<ans;
	return 0;
}


http://www.kler.cn/a/427939.html

相关文章:

  • RoformerBERT介绍
  • 架构10-可观测性
  • Unity 设计模式-观察者模式(Observer Pattern)详解
  • 3D 生成重建019-LERF用文本在Nerf中开启上帝之眼
  • 算法训练-位运算
  • Next.js系统性教学:服务器操作与数据变更
  • 毕设记录_论文阅读(动磁式音圈电机的开发与应用)_20241207
  • 保姆级教学 uniapp绘制二维码海报并保存至相册,真机正常展示图片二维码
  • SAP SD学习笔记19 - 形式发票(Proforma Invoice)
  • Oracle 11g ADG 单实例 DG Broker 配置指南
  • ubuntu20.04设置远程桌面
  • 深度全解析开放开源大模型之BLOOM
  • 牛客linux
  • Linux: shell: bash: Makefile:5: *** missing separator. Stop.
  • 过期策略、内存淘汰机制
  • 深入浅出:使用 Gin 框架生成 API 文档
  • 算法日记 41 day 图论
  • Mysql数据库指令(持续积累)
  • STM32移植文件系统(FatFs)
  • 3D数据大屏实现过程,使用echarts、Next.js