#求助60分

P2367 语文成绩

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];

可能有些不严谨,但改过之后可以过


|