差分例题(c++) 求粉(QwQ)

题目描述

查看题目信息

给定数组a[1],a[2],...,a[n],以及q个操作,每个操作由l,r,x三个整数组成,表示对a[l],a[l+1],...,a[r]这一段数组的每个数都加上x(保证l,r大小合法)。请输出最后的数组。

输入格式

第一行一个整数n,表示数组的大小。

第二行n个整数a[i],表示数组。

第三行一个整数q,表示操作的数量。

接下来q行,每行三个整数l,r,x,表示一次操作。

输出格式

n个整数,表示最后数组的情况。

样例输入

5
1 2 3 4 5
3
1 1 1
2 4 -1
3 5 2

样例输出

2 1 4 5 7

问题提示

对于30%的数据,1<=n,q<=100,0<=a[i]<=100,0<=x<=100。

对于60%的数据,1<=n,q<=100000,0<=a[i]<=100,0<=x<=100。

对于100%的数据,1<=n,q<=200000,0<=a[i]<=1e9,0<=|x|<=1e9。

代码

#include<iostream>
using namespace std;
long long a[1000001],b[1000001],c[1000001];//要用long long
int main()
{
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>b[i];
		a[i]=b[i]-b[i-1];
	}
	int m,l,r,x;
	cin>>m;
	while(m--)
	{
		cin>>l>>r>>x;
		a[l]+=x;
		a[r+1]-=x;
	}
	for(int i=1;i<=n;i++) 
	{
		c[i]=c[i-1]+a[i];
		cout<<c[i]<<" ";
	}
 	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值