C++ 数列游戏

个人简介

大家好,我是2022年3月份新人榜排名第三的 ༺Blog༒Hacker༻
支持我:点赞+收藏⭐️+留言
格言:༺永做优质༒programmer༻
系列专栏:CF & UVA
个人主页:༺Blog༒Hacker༻❄️
C++ 数列游戏_第1张图片

题目描述

来源:NKOJ3754

给定一个长度为 N 的序列,首先进行 A 次操作,每次操作在 L i L_i Li R i R_i Ri 这个区间加上一个数 C i C_i Ci

然后有 B 次询问,每次询问 L i L_i Li R i R_i Ri 的区间和。 初始序列都为 0 0 0

输入格式
第一行三个整数 N , A , B ( 1 < = N < = 106 , 1 < = A < = N , A < = B < = N ) N ,A, B (1<=N<=106,1<=A<=N,A<=B<=N) N,A,B(1<=N<=106,1<=A<=N,A<=B<=N)
接下来 A 行,每行三个数 L i , R i , C i ( 1 < = L i < = N , L i < = R i < = N , ∣ C i ∣ < = 1014 ) L_i, R_i, C_i (1<=L_i<=N,L_i<=R_i<=N,|C_i|<=1014) Li,Ri,Ci(1<=Li<=N,Li<=Ri<=N,Ci<=1014)
接下来 B 行,每行两个数 L i , R i L_i, R_i Li,Ri 范围同上。

输出格式
对于每次询问,输出一行一个整数。

因为最后的结果可能很大,请对结果 m o d mod mod 1000000007 1000000007 1000000007

样例输入
5 1 1
1 3 1
1 4
样例输出
3

CODE

#include
#define ll long long
const int MAXN=1e+7;
const int mod=1e9+7;
using namespace std;
ll d[MAXN],k[MAXN],s[MAXN];
signed main()
{
	ll l,r,c,ans;
	int n,a,b;
	scanf("%d%d%d",&n,&a,&b);
	for(int i=1;i<=a;++i)
	{
		scanf("%lld%lld%lld",&l,&r,&c);
		d[l]=(d[l]+c)%mod;
		d[r+1]=(d[r+1]-c)%mod;
	}
	for(int i=1;i<=n;++i)
		k[i]=(k[i-1]+d[i])%mod;
	for(int i=1;i<=n;++i)
		s[i]=(s[i-1]+k[i])%mod;
	for(int i=1;i<=b;++i)
	{
		scanf("%lld%lld",&l,&r);
		ans=(s[r]-s[l-1])%mod;
		printf("%lld\n",ans);
	}
	return 0;
}

在这里插入图片描述

感谢各位长期以来的支持,点赞收藏是我更新的动力,下期再见,拜拜!!!

你可能感兴趣的:(算法,c++,算法,二分查找)