20分,求救!

P2367 语文成绩

xianghaoyu666 @ 2024-07-08 08:08:27

#include<bits/stdc++.h>
using namespace std;
long long a[10000001];
long long b[10000001];
long long n,m,l,r,c,mn=10000000;
int main(){
    cin>>n>>m;
    for(long long i=1;i<=n;i++){
        cin>>a[i];
    }
    for(long long i=0;i<=m;i++){
        cin>>l>>r>>c;
        b[l]+=c;
        b[r+1]-=c;
    }
    for(long long i=1;i<=n;i++){
        a[i]+=b[i]+a[i-1];
        mn=min(a[i],mn);
    }
    cout<<mn<<endl;
    return 0;
}

by smll_wlm @ 2024-07-08 08:23:42

你修改的是差分数组,通过前缀和算出总分。但是,并没有对于单个成绩的 a 数组进行修改。

所以,可以最后前缀和的时候通过 b_i-b_{i-1} 算出 a_i


by qwqSW @ 2024-07-08 08:24:49

emmm……

for(long long i=0;i<=m;i++){
    cin>>l>>r>>c;
    b[l]+=c;
    b[r+1]-=c;
}

i=0应该得是i=1吧

然后 a[i]+=b[i]+a[i-1];

改成 a[i]=a[i-1]+b[i];就过了


by qwqSW @ 2024-07-08 08:26:23

@qwqSW 输入的时候也没求差分数组


by xianghaoyu666 @ 2024-07-08 11:43:11

谢谢,已经过了


|