#include<bits/stdc++.h> usingnamespace std; typedeflonglong ll; constint M = 1e6 + 7; int n, m; int v[M], t = 0; // v[M]用于记录当前区间各个画师遇见了几次,t用来记录当前区间有几名画师 intmain(){ cin >> n >> m; vector<int> mp; mp.resize(n); for (int i = 0; i < n; i++) { cin >> mp[i]; } int l = 0, r = 0; int mlen = n + 1, bg = -1; // mlen用于记录最优解的长度,bg用于记录最优解区间的左端点 while (r < n) { while (t != m && r < n) { if (!v[mp[r]]) { t++; } v[mp[r]]++; r++; } // 如果当前区间没有遇到所有画师则右指针右移,直到找到或者右指针越界 while (t == m && l < r) { v[mp[l]]--; if (!v[mp[l]]) { t--; } l++; } // 如果当前区间遇到了所有画师则右移左指针,直到区间内不包括所有画师或者左指针大于等于右指针时停止 if (r - l + 1 < mlen) { mlen = r - l + 1; bg = l; } // 更新答案区间 } cout << bg << " " << bg + mlen - 1; return0; }