方法一:自写法
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100010],b[100010];
int main(){
cin>>n>>m;
for(int i=1;i<=n; i++){
cin>>a[i];//输入
b[i]=a[i]-a[i-1];
}
while(m--){
int l,r,c;
cin>>l>>r>>c;//访问
b[l]+=c;
b[r+1]-=c;
}
for(int i=1;i<=n; i++){
b[i]+=b[i-1];//b做自己的前缀和
cout<<b[i]<<' ';//输出
}
return 0;
}
方法二:函数法
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100010],b[100010];
void insert(int l,int r,int c){
b[l]+=c;
b[r+1]-=c;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n; i++){
cin>>a[i];
insert(i,i,a[i]);
}
while(m--){
int l,r,c;
cin>>l>>r>>c;
insert(l,r,c);
}
for(int i=1;i<=n; i++){
b[i]+=b[i-1];
cout<<b[i]<<' ';
}
return 0;
}
错误样例演示:请勿使用
为什么错了?
因为从a[2]开始的a[i]是b[i]
#include<bits/stdc++.h>
using namespace std;
int n,m,a[100010]/*,b[100010]*/;
void insert(int l,int r,int c){
a[l]+=c;
a[r+1]-=c;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n; i++){
cin>>a[i];
insert(i,i,a[i]);
}
while(m--){
int l,r,c;
cin>>l>>r>>c;
insert(l,r,c);
}
for(int i=1;i<=n; i++){
a[i]+=a[i-1];
cout<<a[i]<<' ';
}
return 0;
}
表格