CF602B Approximating a Constant Range

题目描述

Xellos 在大学参加实验课程时,曾经需要测量一种逐渐趋于平衡的效应的强度。确定平衡强度的好方法是选择数量足够多、看起来尽可能恒定的连续数据点,并计算它们的平均值。当然,对于日常的数据规模来说,这没什么挑战性——但我们何不把这个过程做成一道编程竞赛题呢? 给定一个长度为 $n$ 的数据点序列 $a_1, a_2, ..., a_n$。相邻的两个数据点之间不会有很大的跳跃——对于每个 $1 \leq i < n$,都保证 $|a_{i+1} - a_i| \leq 1$。 如果某一段数据点区间 $[l, r]$ 中最大值与最小值之差不超过 $1$,则称区间 $[l, r]$ 为“近似恒定区间”。形式化地,设 $M$ 是 $l \leq i \leq r$ 的 $a_i$ 的最大值,$m$ 是最小值;如果 $M - m \leq 1$,则 $[l, r]$ 是近似恒定区间。 请你找出给定序列中最长的近似恒定区间的长度。

输入格式

第一行包含一个正整数 $n$,表示数据点的数量,满足 $2 \leq n \leq 100000$。 第二行包含 $n$ 个正整数 $a_1, a_2, ..., a_n$,满足 $1 \leq a_i \leq 100000$。

输出格式

输出一个整数,表示给定序列中最长的近似恒定区间的长度。

说明/提示

对于第一个样例,最长的近似恒定区间是 $[2,5]$,其长度为 $4$。 对于第二个样例,有三个长度为 $4$ 的近似恒定区间:$[1,4]$,$[6,9]$ 和 $[7,10]$;唯一长度为 $5$ 的最大近似恒定区间是 $[6,10]$。 由 ChatGPT 5 翻译