样例输出需要知识:一维数组前缀和
题目来源: ACM算法攻关部
2431题。
题目描述
输入一个长度为n的整数序列。
接下来输入m个操作,每个操作包含三个整数l,r,c 表示将序列中[l,r]之间的每个数加上c
请你输出进行完所有操作后的序列。
输入
第一行包含两个整数n和m。
第二行包含n个整数,表示整数序列。
接下来 m 行,每行包含三个整数 l,r,c,表示一个操作。
1≤n,m≤100000,
1≤l≤r≤n,
−1000≤c≤1000,
−1000≤整数序列中元素的值≤1000
输出
共一行,包含n个整数,表示最终序列。
样例输入
6 3 1 2 2 1 2 1 1 3 1 3 5 1 1 6 1
样例输出
3 4 5 3 4 2
#include<stdio.h>
int main()
{
int n,m,l,r,c;
int x,y,z;
int i,j;
int a[100000],b[100000];
scanf("%d %d",&n,&m);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
b[0]=a[0];
for(i=1;i<n;i++)
{
b[i]=a[i]-a[i-1];
}
for(i=0;i<m;i++)
{
scanf("%d %d %d",&x,&y,&z);
b[x-1]=b[x-1]+z;
if(y!=n)
{
b[y]=b[y]-z;
}
}
a[0]=b[0];
printf("%d",a[0]);
for(i=1;i<n;i++)
{
a[i]=b[i]+a[i-1];
printf(" %d",a[i]);
}
return 0;
}