
代码实现
cpp
const int N = 1e6 + 10;
int n, m;
int a[N], mp[N], kind, cost, ret;
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++) cin >> a[i];
int l = 1, r = 1;
cost = n, ret = 1;
while(r <= n)
{
// 进窗口
mp[a[r]]++;
if (mp[a[r]] == 1) kind++;
while(kind == m)
{
// 更新结果
int tmp = r - l + 1;
if (tmp < cost)
{
ret = l;
cost = tmp;
}
// 出窗口
mp[a[l]]--;
if(mp[a[l]] == 0) kind--;
l++;
}
r++;
}
cout << ret << " " << ret + cost -1 << endl;
return 0;
}