有没有大佬帮我看看是哪里错了
查看原帖
有没有大佬帮我看看是哪里错了
903540
15170832506yj楼主2024/11/24 16:18
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int T,n,m;
int c[500001];
int main()
{ 
	cin>>T;
	while(T--)
	{
		cin>>n>>m;
		m=max(2,m);
		for(int i=1;i<=n;i++)
		{
			cin>>c[i];
		}
		ll ans=0;
		int s=1;
		vector<vector<int>> a(500001);
		for(int i=1;i<=n;i++)
		{
			if(c[i]==c[i-1])
			{
				s=i;
			}
			else if(i-s+1>=m)
			{
				int e=i-m+1;
				int l=0;
				int r=a[c[i]].size()-1;
				int L=-1;
				int R=-1;
				while(l<=r)
				{
					int mid=(l+r)/2;
					if(a[c[i]][mid]>=s)
					{
						L=mid;
						r=mid-1;
					}
					else
					{
						l=mid+1;
					}
				} 
				l=0,r=a[c[i]].size()-1;
				while(l<=r)
				{
					int mid=(l+r)/2;
					if(a[c[i]][mid]<=e)
					{
						R=mid;
						l=mid+1;
					}
					else
					{
						r=mid-1;
					}
				}
				ans+=i-m+1;
				if(L<=R&&L!=-1&&R!=-1)
					ans-=R-L+1;
			}
			a[c[i]].push_back(i);
		}
		cout<<ans<<endl;
	}
	return 0;
}

2024/11/24 16:18
加载中...