逛画展 - 洛谷https://www.luogu.com.cn/problem/P1638
#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <cmath>
#include <map>
#include <cstdlib>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 2000010;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
int n, m;
int s[MAXN];
int v[MAXN];
void solve() {
int l, r;
l = r = 1;
int sum = 0;
int mon = 0;
int rec = INF;
int a, b;
while (l <= r && r <= n + 1) {
while (sum < m && r <= n + 1) {
if (v[s[r]] == 0) {
sum++;
}
v[s[r++]]++;
mon++;
}
if (sum == m) {
if (rec > mon) {
a = l;
b = r - 1;
rec = mon;
}
}
v[s[l]]--;
mon--;
if (v[s[l++]] == 0) {
sum--;
}
}
printf("%d %d", a, b);
}
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", s + i);
}
solve();
return 0;
}