Submission #1157643

#TimeUsernameProblemLanguageResultExecution timeMemory
1157643koukirocksFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
88 ms7236 KiB
#include<bits/stdc++.h>
#define speed ios_base::sync_with_stdio(0); cin.tie(0)

using namespace std;
typedef long long ll;

struct BIT {
    int n;
    vector<ll> a;
    BIT(int _n):n(_n) {
        a.resize(n+1);
    }
    void update(int x,ll v) {
        while (x<=n) {
            a[x]+=v;
            x+=(-x&x);
        }
    }
    ll query(int x) {
        ll ans=0;
        while (x) {
            ans+=a[x];
            x-=(-x&x);
        }
        return ans;
    }
};

int main() {
    speed;
    ll n,q,s,t;
    cin>>n>>q>>s>>t;
    vector<ll> a(n+1);
    ll ans=0;
    BIT b(n);
    cin>>a[0];
    for (int i=1;i<=n;i++) {
        cin>>a[i];
        b.update(i,a[i]-a[i-1]);
        ll d=a[i-1]-a[i];
        ans+=(d>0?t:s)*d;
    }
    auto cal = [&](int i) {
        // cout<<i<<" cla\n"<<flush;
        ll d=b.query(i-1)-b.query(i);
        return (d>0?t:s)*d;
    };
    // cout<<ans<<"\n";
    while (q--) {
        ll l,r,v;
        cin>>l>>r>>v;
        // cout<<l<<" "<<r<<" "<<v<<" lrv\n"<<flush;
        ans-=cal(l);
        if (r!=n) ans-=cal(r+1);
        b.update(l,v);
        b.update(r+1,-v);
        ans+=cal(l);
        if (r!=n) ans+=cal(r+1);
        cout<<ans<<"\n";
        // for (int i=1;i<=n;i++) cout<<b.query(i)<<" ";
        // cout<<"\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...