my code
#include<cstdio>
int n,m;
int s[1000100];
int num[2010];
int sum;
int ans=0x7f7f7f7f,ansa=1,ansb=n;
int r=0,l=1;
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",s+i);
while(l<=n)
{
while(sum<m&&r<n)
{
r++;
if(num[s[r]]==0) sum++;
num[s[r]]++;
}
num[s[l]]--;
if(num[s[l]]==0) sum--;
l++;
if(sum==m&&r-l+1<ans)
{
ans=r-l+1;
ansa=l;
ansb=r;
}
}
printf("%d %d",ansa,ansb);
return 0;
}
80pts
AC$$code
#include<cstdio>
int check[2001], paint[1000001];
int main()
{
int n, m, cnt = 0, minn = 1000001, j = 0, i = 1;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
scanf("%d", paint + i);
int a = 1, b = n;
while(i <= n)
{
while(cnt < m && j < n) {
j++;
if(check[paint[j]] == 0) cnt++;
check[paint[j]]++;
}
check[paint[i]]--;
if(check[paint[i]] == 0) cnt--;
i++;
if(j - i + 1 < minn && cnt == m) a = i, b= j, minn = j - i + 1;
}
printf("%d %d", a, b);
return 0;
}
(貌似只有变量名字的不同吧)