Code ==
#include <stdio.h>
#include <limits.h>
const int MAXN = 1000000 + 5, MAXM = 2000 + 5;
int gallery[MAXN], counts[MAXM];
int main()
{
int n, m;
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i++)
scanf("%d", &gallery[i]);
int ans = INT_MAX, l = 0, r = 0;
int ansl, ansr;
for (; r < n; r++)
{
counts[gallery[r]]++;
bool done = true;
for (int i = 1; i <= m; i++)
if (!counts[i])
{
done = false;
break;
}
#ifndef ONLINE_JUDGE
printf("after r = %d, counts = [%d, %d, %d, %d, %d]\n", r, counts[1], counts[2], counts[3], counts[4], counts[5]);
#endif
if (done)
break;
}
r++;
for (; r < n; r++)
{
#ifndef ONLINE_JUDGE
printf("r = %d, counts = [%d, %d, %d, %d, %d]\n", r, counts[1], counts[2], counts[3], counts[4], counts[5]);
#endif
for (; l < r; l++)
{
if (counts[gallery[l]] == 1)
break;
counts[gallery[l]]--;
}
#ifndef ONLINE_JUDGE
printf("l = %d\n", l);
#endif
if (r - l < ans)
{
ans = r - l;
ansl = l;
ansr = r;
}
counts[gallery[r]]++;
}
printf("%d %d", ansl + 1, ansr);
return 0;
}