这题算法标签怕不是假的,明明双指针就能解决
#include<bits/stdc++.h>
#define LL long long
#define PP pair<int, int>
using namespace std;
const int N = 1e6 + 10;
const int M = 2e3 + 10;
int a[N], cnt;
bool f[N];
int flag[N];
int Minl, Minr, Min = 2147483647;
int l, r;
int n, m;
int main () {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
cnt = m;
for (r = 1; r <= n; r++) {
if (f[a[r]] == false) {
cnt--;
f[a[r]] = true;
}
flag[a[r]]++;
while (cnt == 0 && l < r) {
l++;
flag[a[l]]--;
if (flag[a[l]] == 0) {
f[a[l]] = false;
cnt++;
}
int len = r - l + 1;
if (len < Min) {
Min = len;
Minl = l;
Minr = r;
}
}
}
cout << Minl << ' ' << Minr << endl;
return 0;
}