A-Car Show
思路:双指针
AC代码:
#include <stdio.h>
#include <string.h>
int main()
{
int n,m;
scanf("%d %d",&n,&m);
int a[n];
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
long long ans=0;
int s=m;
int app[m+1];//统计每个数的出现次数
memset(app,0,sizeof(app));
for(int l=0,r=0;l<n;l++){
while(r<n&&s>0){
if(app[a[r]]==0){//第一次出现时,s--,s=0时,说明全部都出现了一次。
s--;
}
app[a[r]]++;
r++;
}
if(s==0) ans+=n-r+1;
app[a[l]]--;//下标为l的数出现次数减一
if(app[a[l]]==0) s++;
}
printf("%lld",ans);
}