题目地址:CF1119A Ilya and a Colorful Walk
\(O(n^2)\) 肯定过不掉
记 \(p_i\) 为从下标 \(1\) 开始连续出现 \(i\) 的个数
那么对于每一个 \(i\) ,在 \(i\) 之前离 \(i\) 最远的与 \(a_i\) 不同的数的距离显然为 \(i-p_{a_i}-1\) 。
取 \(max\) 就好了
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 6;
int n, a[N], p[N], ans;
int main() {
cin >> n;
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 1; i <= n; i++)
if (p[a[i]] == i - 1) p[a[i]] = i;
for (int i = 1; i <= n; i++)
ans = max(ans, i - p[a[i]] - 1);
cout << ans << endl;
return 0;
}