K11741 数列游戏
题目描述
给定一个长度为N的序列,首先进行A次操作,每次操作在Li和Ri这个区间加上一个数Ci。然后有B次询问,每次询问Li到Ri的区间和。初始序列都为0。
输入格式
第一行三个整数N A B。(1<=N<=500000,1<=A<=N,A<=B<=N)
接下来A行,每行三个数Li Ri Ci。(1<=Li<=N,Li<=Ri<=N,0=<Ci≤10^9)。
接下来B行,每行两个数 Li Ri。范围同上。
输出格式
对于每次询问,输出一行一个整数。因为最后的结果可能很大,请将结果对10007取模
输入输出样例
输入样例1:
5 1 1 1 3 1 1 4
输出样例1:
3
知识点:差分数组and前缀和
AC代码:
/*
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<sstream>
using namespace std;
typedef long long ll;
ll a[1000010],sum[1000010],d[1000010];
int main(){
ll n,m,q,l,r,x;
cin>>n>>m>>q;
while(m--){
scanf("%lld %lld %lld",&l,&r,&x);
d[l]+=x;
d[r+1]-=x;
}
for(ll i=1;i<=n;i++) a[i]=a[i-1]+d[i];
for(ll i=1;i<=n;i++) sum[i]=sum[i-1]+a[i];
while(q--){
scanf("%lld %lld",&l,&r);
printf("%lld\n",(sum[r]-sum[l-1])%10007);
}
return 0;
}
【耗时限制】1000ms 【内存限制】128MB
1135

被折叠的 条评论
为什么被折叠?



