原题链接:洛谷 P2367 语文成绩
一道差分题
差分数组:f[i]=a[i]-a[i-1]
当f[x]+=z
时,a[1~x]+=z
当f[x]-=z
时,a[1~x]-=z
所以一个x~y
区间加上z
时:f[x]+=z,f[y+1]-=z,a[x~y]+=z
同理一个x~y
区间减上z
时:f[x]-=z,f[y+1]+=z,a[x~y]-=z
最终数组:a[i]=a[i-1]+f[i]
得代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int read(){
int x=0,f=1;
char c=getchar();
while (c<'0'||c>'9'){
if (c=='-') f=-1;
c=getchar();
}
while (c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return x*f;
}
int n,q;
int ans=10000010;
int f[5000010],a[5000010];
int main(){
scanf("%d%d",&n,&q);
for (int i=1;i<=n;i++){
a[i]=read();
f[i]=a[i]-a[i-1];
}
for (int i=1;i<=q;i++){
int x,y,z;
x=read();
y=read();
z=read();
f[x]+=z;
f[y+1]-=z;
}
for (int i=1;i<=n;i++){
a[i]=a[i-1]+f[i];
ans=min(ans,a[i]);
}
printf("%d",ans);
return 0;
}