Submission #1354495

#TimeUsernameProblemLanguageResultExecution timeMemory
1354495luvwinterFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
208 ms13956 KiB
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int , int>
#define FOR(i , l , r) for(int i = (l) ; i <= (r) ; i++)
#define FOD(i , r , l) for(int i = (r) ; i >= (l) ; i--)
#define endl '\n'
#define fi first
#define se second
#define pb push_back
const int N = 2e5 + 5;
int a[N];
int st[4 * N];
int lazy[4 * N];
int n , q , s , t;
int res = 0;
void down(int idx) {
     int k = lazy[idx];
     if(k == 0) return;
     st[2 * idx] += k;
     st[2 * idx + 1] += k;
     lazy[2 * idx] += k;
     lazy[2 * idx + 1] += k;
     lazy[idx] = 0;
}


void update(int idx , int l , int r , int u , int v , int val) {
    if(l > v || r < u) return;
    if(u <= l && r <= v) {
        st[idx] += val;
        lazy[idx] += val;
        return;
    }
    down(idx);
    int mid = (l + r) / 2;
    update(2 * idx , l , mid , u , v , val);
    update(2 * idx + 1 , mid + 1 , r , u , v , val);
}

int get(int idx , int l , int r, int pos) {
     if(l == r) {
        return st[idx];
     }
     down(idx);
     int mid = (l + r) / 2;
     if(pos <= mid) return get(2 * idx , l , mid , pos);
     else return get(2 * idx + 1 , mid + 1 , r , pos);

}


void solve () {

    cin >> n >> q >> s >> t;
    FOR(i , 1 , n + 1) {
        cin >> a[i];
        update(1 , 1 , n + 1, i , i , a[i]);
        if(i >= 2) {
            if(a[i] > a[i - 1]) res -= s * (a[i] - a[i - 1]);
            else res += t * (a[i - 1] - a[i]);
        }
    }

    while(q--) {
        int l , r , c; cin >> l >> r >> c;
        l++; r++;
        int v1 = get(1 , 1 , n + 1, l);
        int v2 = get(1 , 1 , n + 1, l - 1);
        int v3 = get(1 , 1 , n + 1 , r);
        int v4 = get(1 , 1 , n + 1 , r + 1);
        update(1 , 1 , n + 1 , l , r , c);
        int v5 = get(1 , 1 , n + 1 , l);
        int v6 = get(1 , 1 , n + 1 , r);
        if(l != 1) {
            if(v2 >= v1) res -= t * (v2 - v1);
            else res += s * (v1 - v2);
            if(v2 >= v5) res += t * (v2 - v5);
            else res -= s * (v5 - v2);
        }
        if(r != n + 1) {
            if(v3 >= v4) res -= t * (v3 - v4);
            else res += s * (v4 - v3);
            if(v6 >= v4) res += t * (v6 - v4);
            else res -= s * (v4 - v6);
        }
        cout << res << endl;



    }


}




main () {
    ios_base :: sync_with_stdio(false);
    cin.tie(NULL);
    solve();
    return 0;


}

Compilation message (stderr)

foehn_phenomena.cpp:99:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   99 | main () {
      | ^~~~
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...