竞赛讨论区 > 1020——储物点的距离,捞!
头像
荆镕泽_
发布于 2024-06-11 17:13
+ 关注

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?

大佬捞

全部评论

(1) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐