样例是对的,但测试点一错了......
#include<bits/stdc++.h>
#pragma GCC optimize(3)
using namespace std;
inline int read() {
register int s=0,f=1;
register char ch=getchar();
if(ch=='-')f=-1,ch=getchar();
while(ch>='0'&&ch<='9')s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
return s*f;
}
inline int write(int a) {
if(a<0) {
putchar('-');
a=-a;
}
int s[20],top=0;
while(a) {
s[++top]=a%10;
a/=10;
}
if(!top)s[++top]=0;
while(top)putchar(s[top--]+'0');
return 0;
}
int c[1000001],h[20010];
int main() {
int n=read(),m=read(),a,b,sum=0,l=1,len,r;
for(int i=1; i<=n; i++)
c[i]=read();
for(int i=1; i<=n; i++) {
h[c[i]]++;
if(h[c[i]]==1)sum++;
if(sum==m) {
b=i;
break;
}
}
while(h[c[l]]>1) {
h[c[l]]--;
l++;
}
a=l;
len=b-a;
r=b;
while(r<n) {
r++;
h[c[r]]++;
while(h[c[l]]>1) {
h[c[l]]--;
l++;
}
if(r-l<len) {
a=l;
b=r;
len=b-a;
}
}
printf("%d %d",a,b);
return 0;
}
求大佬告知原因