Submission #1302467

#TimeUsernameProblemLanguageResultExecution timeMemory
1302467ffeyyaae_Foehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
112 ms7356 KiB
#include <bits/stdc++.h>

using namespace std;

using ll = long long;

const int N = 2e5+5;

int n, q;
ll S, T, ans;
ll a[N];

struct FWtree
{
    ll tree[N];

    void update( int idx, ll v )
    {
        for( int i=idx;i<=n;i+=i&-i ) tree[i] += v;
    }

    ll query( int idx )
    {
        ll sum = 0;
        for( int i=idx;i>0;i-=i&-i ) sum += tree[i];
        return sum;
    }

}fen;

ll cal( ll a, ll b )
{
    return (a-b)*((a>b)?T:S);
}

int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin >> n >> q >> S >> T;
    for( int i=0;i<=n;i++ )
    {
        cin >> a[i];
        if(i>0) fen.update( i, a[i]-a[i-1] );
        if(i>0) ans += cal( a[i-1], a[i] );
    }
    while( q-- )
    {
        int l, r;
        ll x;
        cin >> l >> r >> x;
        ll a = cal( fen.query(l-1), fen.query(l) );
        if( r<n ) a += cal( fen.query(r), fen.query(r+1) );
        fen.update( l, x );
        fen.update( r+1, -x );
        ll b = cal( fen.query(l-1), fen.query(l) );
        if( r<n ) b += cal( fen.query(r), fen.query(r+1) );
        ans += b-a;
        cout << ans << "\n";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...