#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这几个测试点
求各位大佬帮忙调一下,谢谢