20pts求助
查看原帖
20pts求助
1047694
Shq_likes_AC楼主2024/6/17 22:03
#include<bits/stdc++.h>
using namespace std;
long long n,a[500005],c[500005],l;
void fun (long long int &i,long long int &j)
{
	for(;i<=j;i++)	c[a[i]]=0;
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		cin>>n>>l;
		l=max(l,2ll);
		memset(c,0,sizeof(c));
		for(int i=1;i<=n;i++)
			cin>>a[i];
		long long ii=1,i=1,j=l,ans=0;
		while(j<=n&&ii<=n)
		{
			if(i+l-1>=j)
				c[a[i]]++,i++;
			
			if(ii+l-1<=j)
				ans+=j-ii-l+2-c[a[j]];
			
			if(a[j+1]!=a[j])
				j++;
			else
				j++,fun(ii,j),i=j;
		}
//		while(j<=n&&i<=n)
//		{
//			if(n-i+1<l) break;
//			while(j-i+1<l&&a[j]!=a[j+1]&&j<=n)
//				j++;
//			if(j-i+1<l)
//				i=i;//糊弄编译器 
//			else if(j-i==l&&a[j]==a[j+1])
//				tmp+=1;
//			else
//			{
//				c[a[j-l+1]]=1;
//				tmp=0; 
//				while(a[j-1]!=a[j]&&j<=n)
//				{
//					tmp+=j-l-i+2-c[a[j]];
//					j++;
//					c[a[j-l+1]]++;
//				}
//			}
//			for(i=i-1;i<=j+1;i++)
//				c[a[i]]=0;
//			j++;
//			ans+=tmp;
//			tmp=0;
//		}
		cout<<ans<<endl;
	} 
}
2024/6/17 22:03
加载中...