CyaNgw_DyG @ 2021-12-26 17:14:26
#include<bits/stdc++.h>
using namespace std;
long long n,k,a[5000002],x,y,z,ans,minn=999999999999;
int main() {
cin>>n>>k;
for(int i=1;i<=n;cin>>a[i++]);
for(int i=2;i<=n;i++)a[i]=a[i]-a[i-1];
while(k--){
cin>>x>>y>>z;
a[x]+=z;if(y==n)y--;a[y+1]-=z;
}
for(int i=1;i<=n;i++){
ans+=a[i];
if(ans<minn)minn=ans;
}cout<<minn;
}
为什么只有60分...蒟蒻求助
by KinoTsuki @ 2022-03-20 17:02:52
要另定义一个差分数组di[]来存差分结果。即:
for(int i=1;i<=n;i++) di[i]=a[i]-a[i-1];
中间的if(y==n)y--;
多余了
最后要利用差分数组重置a[]
a[i]=di[i]+a[i-1];
if(a[i]<minn)minn=a[i];
可能有些不严谨,但改过之后可以过