Submission #1296719

#TimeUsernameProblemLanguageResultExecution timeMemory
1296719chithanhnguyenFoehn Phenomena (JOI17_foehn_phenomena)C++20
100 / 100
90 ms7292 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ld long double
#define pii pair<int, int>
#define fi first
#define se second
#define __builtin_popcount __builtin_popcountll
#define all(x) (x).begin(), (x).end()

#define debug(a, l, r) for (int i = (l); i <= (r); ++i) cout << (a)[i] << ' '; cout << '\n';

struct FenwickTree{
    int n; vector<int> fen;

    FenwickTree() {
    }

    FenwickTree(int _n) : n(_n) {
        fen.resize(n + 5, 0);
    }

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

    int get(int idx) {
        int sum = 0;
        for (int i = idx; i; i -= i & -i)
            sum += fen[i];
        return sum;
    }

    void update_range(int l, int r, int v) {
        update(l, v);
        update(r + 1, -v);
    }
};

const int MAXN = 2e5 + 5;
int n, q, s, t, a[MAXN], temp = 0;
FenwickTree fen;

int calc(int x, int y) {
    if (x > y) return (x - y) * t;
    if (x < y) return (x - y) * s;
    return 0;
}

void init() {
    cin >> n >> q >> s >> t;
    ++n;
    for (int i = 1; i <= n; ++i) cin >> a[i];
    fen = FenwickTree(n);
    for (int i = 1; i <= n; ++i) fen.update(i, a[i] - a[i - 1]);
    for (int i = 1; i < n; ++i) temp += calc(a[i], a[i + 1]);
}

void solve() {
    // q = 1; 
    while (q--) {
        int l, r, x; cin >> l >> r >> x;
        ++l; ++r;
        int old_inc = calc(fen.get(l - 1), fen.get(l));
        if (r < n) old_inc += calc(fen.get(r), fen.get(r + 1));

        fen.update_range(l, r, x);

        int new_inc = calc(fen.get(l - 1), fen.get(l));
        if (r < n) new_inc += calc(fen.get(r), fen.get(r + 1));

        temp = (temp - old_inc + new_inc);
        cout << temp << '\n';
    }
}

signed main() {
    #ifdef NCTHANH
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    #endif
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr); cout.tie(nullptr);

    init();
    solve();

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...