1020——储物点的距离,捞!
#include<bits/stdc++.h>
using namespace std;
const int N=2e8+10;
const int M=1000000007;
long long int a[N],b[N],pre_a[N],pre_b[N],c[N],pre_c[N];
int main()
{
int n;
int m;
cin>>n>>m;
for(int i=2; i<=n; i++)
{
cin>>a[i];
pre_a[i]=(pre_a[i-1]+a[i])%M;
}
for(int i=1; i<=n; i++)
{
cin>>b[i];
c[i]=(pre_a[i]*b[i])%M;
pre_c[i]=(pre_c[i-1]+c[i])%M;
pre_b[i]=(pre_b[i-1]+b[i])%M;
}
while(m--)
{
long long int x,l,r;
cin>>x>>l>>r;
long long int ans=0;
if(x<l)
{
long long int s1=(pre_c[r]-pre_c[l-1]+M)%M;
long long int s2=(pre_a[x]*((pre_b[r]-pre_b[l-1]+M)%M))%M;
ans=s1-s2;
}
else if(x>r)
{
long long int s3=pre_c[r]-pre_c[l-1];
long long int s4=pre_a[x]*(pre_b[r]-pre_b[l-1]);
ans=s4-s3;
}
else
{
long long int s1=(pre_c[x]-pre_c[l-1])%M;
long long int s2=(pre_a[x]*((pre_b[x]-pre_b[l-1]+M)%M))%M;
ans=s2-s1;
long long int s3=(pre_c[r]-pre_c[x-1])%M;
long long int s4=(pre_a[x]*((pre_b[r]-pre_b[x-1]+M)%M))%M;
ans+=s3-s4;
}
cout<<ans<<endl;
}
return 0;
}
用例通过率为 0%
why?
大佬捞