P6465
Night_sea_64 · · 题解
以下的
双指针。枚举左端点
代码挺短的,跑的也挺快,为
#include<algorithm>
#include<cstdio>
using namespace std;
int t,n,m,a[500010],cnt[500010];
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
long long ans=0;
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
int r=0;
for(int l=1;l<=n;l++)
{
while((r<l||a[r]!=a[r+1])&&r<n)
if(++r>=l+m-1)cnt[a[r]]++;
ans+=max(0,r-(l+m-1)+1-cnt[a[l]]);
if(r>=l+m-1)cnt[a[l+m-1]]--;
}
printf("%lld\n",ans);
}
return 0;
}