#jsongs. 2026暑假CSP-J模拟赛04-T2 程老师的循环歌单

2026暑假CSP-J模拟赛04-T2 程老师的循环歌单

【文件读写】本题使用文件读写:输入文件 songs.in,输出文件 songs.out

时间限制:1000ms 内存限制:512MB

题目描述

程老师最近迷上了一个音乐播放软件。这个软件有个很有意思的功能:它会把用户收藏的所有歌曲排成一条长长的列表,每首歌对应一个编号。程老师的歌单里一共有 nn 首歌,从左到右依次排列,第 ii 首歌的编号为 aia_i

歌单里的歌并不一定首首不同。有些歌程老师特别喜欢,会反复收藏好多遍;有些歌可能是软件自动推荐时重复添加的;还有些歌虽然名字不同,但系统分配了相同的编号,被软件视为同一首歌。总之,不同位置上的歌完全可能拥有相同的编号,这在歌单里是再正常不过的事。歌单的总长度可能很大,成千上万首歌挤在一起也是常有的。

程老师每天坐地铁通勤的时候,会从歌单里挑一段来听。他的挑选方式很规矩:必须是连续的一段,不能跳着选。具体来说,他会定好左端和右端两个位置 llrr1lrn1 \le l \le r \le n),然后从第 ll 首开始,一首接一首地听到第 rr 首,中间不间断、不跳过。这段连续歌单的长度就是 rl+1r - l + 1 首。

不过程老师的耳朵有个怪脾气。他可以容忍同一首歌在连续歌单里出现两次——毕竟好歌听两遍不嫌多。但如果同一首歌出现三次甚至更多,他就会浑身不自在,觉得这段歌单调得发腻。用更准确的话来说:对于任意一个编号 xx,它在所选的连续区间 [l,r][l, r] 中出现的总次数不能超过 22。如果存在某个编号出现了 33 次或以上,这段歌单就是不合法的,程老师绝不会选它。这个规则对区间里的每一种编号都独立生效。

程老师想在通勤路上尽可能多听几首歌,所以他希望选出的合法连续歌单段越长越好。问题是,这个歌单实在太长了,手动挑来挑去既费时又容易遗漏,光靠肉眼扫一遍很难确定最优的起点和终点在哪里。请你写一个程序,帮程老师算出满足条件的最长连续歌单段的长度。

输入格式

第一行一个正整数 nn,表示歌单里歌的数量。

第二行 nn 个正整数 a1,a2,,ana_1, a_2, \ldots, a_n,依次表示每首歌的编号。

输出格式

一行一个整数,表示满足条件的最长连续歌单段的长度。

数据范围

测试点编号 nn \le 特殊性质
1 1010
2~4 100100
5~8 20002000
9~10 10410^4
11~12 10510^5 A
13~14 B
15~20

特殊性质 A:歌单里只有 1010 种不同的编号。

特殊性质 B:所有编号两两不同。

对于全部数据,1n1051 \le n \le 10^51ai1091 \le a_i \le 10^9

样例输入 1

8
1 2 1 3 1 2 4 5

样例输出 1

7

样例输入 2

5
7 7 7 7 7

样例输出 2

2

样例输入 3

6
1 2 3 1 2 3

样例输出 3

6

样例解释

对第一个样例,可以选第 22 首到第 88 首这一段:编号 11 出现 22 次,编号 22 出现 22 次,编号 334455 各出现 11 次,没有编号出现超过 22 次,长度为 77

难度 普及
通过率 50%
尝试 4
已通过 2
ID
696
类型
传统题
Time Limit
1000ms
Memory Limit
512MiB
上传者

相关

在下列比赛中:

暑假CSP-J模拟赛 第4场