wa50求调
查看原帖
wa50求调
562569
kingho11楼主2024/7/21 18:39
#include<bits/stdc++.h>
using namespace std;
const long long N=1e5+5,MOD=1e9+7;
long long n,a[N],A0[N],A1[N],B0[N],B1[N],A[N],B[N],sum,suma,sumb;
void solve(long long l,long long r)
{
	if(l==r)
	{
		sum+=a[l];
		sum%=MOD;
		return ;
	}
	long long mid=l+r>>1;
	solve(l,mid);
	solve(mid+1,r);
	suma=0,sumb=0;
	for(long long i=mid;i>=l;i--)
	{
		if(i==mid)
		{
			A1[i]=a[i];
			A1[i+1]=0; 
		}else if(i==mid-1)
		{
			A1[i]=max(A1[i+1],A1[i+2]+a[i]);
			A0[i]=a[i];
			A0[i+1]=0; 
		}else
		{
			A1[i]=max(A1[i+1],A1[i+2]+a[i]);
			A0[i]=max(A0[i+1],A0[i+2]+a[i]);
		}
		A[i]=A0[i]-A1[i];
		suma+=A1[i];
	}
	for(long long i=mid+1;i<=r;i++)
	{
		if(i==mid+1)
		{
			B1[i]=a[i];
			B1[i-1]=0;
		}else if(i==mid+2)
		{
			B1[i]=max(B1[i-1],B1[i-2]+a[i]);
			B0[i]=a[i];
			B0[i-1]=0;
		}else
		{
			B1[i]=max(B1[i-1],B1[i-2]+a[i]);
			B0[i]=max(B0[i-1],B0[i-2]+a[i]);
		}
		B[i]=B0[i]-B1[i];
		sumb+=B1[i];
	}
	sort(A+l,A+mid+1);
	sort(B+mid+1,B+r+1);
	long long j=mid+1;
	for(long long i=l;i<=mid;i++)
	{
		while(j<=r && B[j]<A[i])
		{
			j++;
		}
		sum+=(j-1-mid)*A[i];
		sum%=MOD;
	}
	j=l;
	for(long long i=mid+1;i<=r;i++)
	{
		while(j<=mid && A[j]<=B[i])
		{
			j++;
		}
		sum+=(j-l)*B[i];
		sum%=MOD;
	}
	sum=sum+(suma)*(r-mid)+sumb*(mid-l+1); 
	sum%=MOD;
}
int main()
{
	cin>>n;
	for(long long i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	solve(1,n);
	cout<<sum%MOD;
	return 0;
}

这个代码错了subtask #4和subtask #5的#25,#26,#29,#30这几个测试点

求各位大佬帮忙调一下,谢谢

2024/7/21 18:39
加载中...