답안 #996677

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
996677 2024-06-11T05:04:44 Z overwatch9 Foehn Phenomena (JOI17_foehn_phenomena) C++17
100 / 100
665 ms 29012 KB
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
using ll = long long;
struct node {
    ll val = 0;
    bool pd = false;
    ll lz = 0;
};
struct stree {
    #define lc v*2
    #define rc v*2+1
    vector <node> tree;
    stree (int s) {
        tree.resize(s * 4);
    }
    void pushdown(int v) {
        if (!tree[v].pd)
            return;
        tree[v].pd = false;
        tree[lc].pd = tree[rc].pd = true;
        tree[lc].lz += tree[v].lz;
        tree[rc].lz += tree[v].lz;
        tree[v].lz = 0;
    }
    void update(int v, int tl, int tr, int l, int r, ll delta) {
        if (tl > r || tr < l)
            return;
        if (tl >= l && tr <= r) {
            tree[v].lz += delta;
            tree[v].pd = true;
            return;
        }
        pushdown(v);
        int tm = (tl + tr) / 2;
        update(lc, tl, tm, l, r, delta);
        update(rc, tm+1, tr, l, r, delta);
    }
    ll query(int v, int tl, int tr, int p) {
        if (tl == tr)
            return tree[v].lz + tree[v].val;
        pushdown(v);
        int tm = (tl + tr) / 2;
        if (tm >= p && tl <= p)
            return query(lc, tl, tm, p);
        else
            return query(rc, tm+1, tr, p);
    }
};
int main() {
    int N, Q;
    ll S, T;
    cin >> N >> Q >> S >> T;
    vector <ll> a(N+1);
    for (int i = 0; i <= N; i++)
        cin >> a[i];
    stree tree(N+3);
    int sz = N+2;
    for (int i = 0; i <= N; i++)
        tree.update(1, 0, sz, i, i, a[i]);
    ll ans = 0;
    for (int i = 0; i+1 <= N; i++) {
        if (a[i] < a[i+1])
            ans -= S * (a[i+1] - a[i]);
        else
            ans += T * (a[i] - a[i+1]);
    }
    while (Q--) {
        int l, r, x;
        cin >> l >> r >> x;
        ll a = tree.query(1, 0, sz, l-1);
        ll b = tree.query(1, 0, sz, l);
        ll c = tree.query(1, 0, sz, r);
        ll d = tree.query(1, 0, sz, r+1);
        if (a < b)
            ans += S * (b - a);
        else
            ans -= T * (a - b);
        if (r+1 <= N) {
            if (c < d)
                ans += S * (d - c);
            else
                ans -= T * (c - d);
        }

        b += x;
        c += x;

        if (a < b)
            ans -= S * (b - a);
        else
            ans += T * (a - b);
        
        if (r+1 <= N) {
            if (c < d)
                ans -= S * (d - c);
            else
                ans += T * (c - d);
        }
        
        tree.update(1, 0, sz, l, r, x);
        cout << ans << '\n';
    }
}
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 604 KB Output is correct
2 Correct 6 ms 660 KB Output is correct
3 Correct 6 ms 604 KB Output is correct
4 Correct 7 ms 616 KB Output is correct
5 Correct 5 ms 652 KB Output is correct
6 Correct 5 ms 604 KB Output is correct
7 Correct 5 ms 604 KB Output is correct
8 Correct 5 ms 668 KB Output is correct
9 Correct 5 ms 676 KB Output is correct
10 Correct 5 ms 604 KB Output is correct
11 Correct 5 ms 604 KB Output is correct
12 Correct 5 ms 604 KB Output is correct
13 Correct 5 ms 604 KB Output is correct
14 Correct 4 ms 604 KB Output is correct
15 Correct 5 ms 604 KB Output is correct
16 Correct 4 ms 604 KB Output is correct
17 Correct 6 ms 604 KB Output is correct
18 Correct 5 ms 600 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 344 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 560 ms 22100 KB Output is correct
2 Correct 600 ms 22820 KB Output is correct
3 Correct 551 ms 23376 KB Output is correct
4 Correct 568 ms 22352 KB Output is correct
5 Correct 590 ms 23332 KB Output is correct
6 Correct 440 ms 23632 KB Output is correct
7 Correct 452 ms 23632 KB Output is correct
8 Correct 623 ms 23636 KB Output is correct
9 Correct 553 ms 23892 KB Output is correct
10 Correct 553 ms 22616 KB Output is correct
11 Correct 446 ms 23632 KB Output is correct
12 Correct 469 ms 24100 KB Output is correct
13 Correct 440 ms 24456 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 604 KB Output is correct
2 Correct 6 ms 660 KB Output is correct
3 Correct 6 ms 604 KB Output is correct
4 Correct 7 ms 616 KB Output is correct
5 Correct 5 ms 652 KB Output is correct
6 Correct 5 ms 604 KB Output is correct
7 Correct 5 ms 604 KB Output is correct
8 Correct 5 ms 668 KB Output is correct
9 Correct 5 ms 676 KB Output is correct
10 Correct 5 ms 604 KB Output is correct
11 Correct 5 ms 604 KB Output is correct
12 Correct 5 ms 604 KB Output is correct
13 Correct 5 ms 604 KB Output is correct
14 Correct 4 ms 604 KB Output is correct
15 Correct 5 ms 604 KB Output is correct
16 Correct 4 ms 604 KB Output is correct
17 Correct 6 ms 604 KB Output is correct
18 Correct 5 ms 600 KB Output is correct
19 Correct 0 ms 348 KB Output is correct
20 Correct 0 ms 344 KB Output is correct
21 Correct 0 ms 348 KB Output is correct
22 Correct 560 ms 22100 KB Output is correct
23 Correct 600 ms 22820 KB Output is correct
24 Correct 551 ms 23376 KB Output is correct
25 Correct 568 ms 22352 KB Output is correct
26 Correct 590 ms 23332 KB Output is correct
27 Correct 440 ms 23632 KB Output is correct
28 Correct 452 ms 23632 KB Output is correct
29 Correct 623 ms 23636 KB Output is correct
30 Correct 553 ms 23892 KB Output is correct
31 Correct 553 ms 22616 KB Output is correct
32 Correct 446 ms 23632 KB Output is correct
33 Correct 469 ms 24100 KB Output is correct
34 Correct 440 ms 24456 KB Output is correct
35 Correct 576 ms 22320 KB Output is correct
36 Correct 569 ms 23636 KB Output is correct
37 Correct 603 ms 24404 KB Output is correct
38 Correct 555 ms 24360 KB Output is correct
39 Correct 566 ms 24144 KB Output is correct
40 Correct 577 ms 24360 KB Output is correct
41 Correct 665 ms 24148 KB Output is correct
42 Correct 574 ms 24148 KB Output is correct
43 Correct 557 ms 23364 KB Output is correct
44 Correct 565 ms 23888 KB Output is correct
45 Correct 572 ms 23632 KB Output is correct
46 Correct 605 ms 24404 KB Output is correct
47 Correct 449 ms 29012 KB Output is correct
48 Correct 447 ms 28824 KB Output is correct
49 Correct 549 ms 27832 KB Output is correct
50 Correct 438 ms 28756 KB Output is correct
51 Correct 450 ms 29004 KB Output is correct
52 Correct 447 ms 29012 KB Output is correct