답안 #709440

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
709440 2023-03-13T15:17:24 Z PixelCat Two Dishes (JOI19_dishes) C++14
74 / 100
4083 ms 251296 KB
#include <bits/stdc++.h>
#define For(i, a, b) for(int i = a; i <= b; i++)
#define Forr(i, a, b) for(int i = a; i >= b; i--)
#define F first
#define S second
#define sz(x) ((int)x.size())
#define all(x) x.begin(), x.end()
#define eb emplace_back
#define int LL
using namespace std;
using LL = long long;
using pii = pair<int, int>;

const int MAXN = 1000010;
const int INF = 8e18;

// range add, range max
#define L(id) ((id) * 2 + 1)
#define R(id) ((id) * 2 + 2)
struct SegTree {
    struct Node {
        int mx, add;
    } a[MAXN << 2];
    void init(int val) {
        For(i, 0, (MAXN << 2) - 1) {
            a[i].mx = val;
            a[i].add = 0;
        }
    }
    void _add(int id, int x) {
        a[id].add += x;
        a[id].mx += x;
    }
    void pull(int id) {
        a[id].mx = max(a[L(id)].mx, a[R(id)].mx);
    }
    void push(int id) {
        if(a[id].add != 0) {
            _add(L(id), a[id].add);
            _add(R(id), a[id].add);
            a[id].add = 0;
        }
    }
    void add(int id, int l, int r, int L, int R, int x) {
        // if(l > R || r < L) return;
        if(l >= L && r <= R) {
            _add(id, x);
            return;
        }
        push(id);
        int m = (l + r) / 2;
        if(L <= m) add(L(id), l, m, L, R, x);
        if(R > m)  add(R(id), m + 1, r, L, R, x);
        pull(id);
    }
    void set(int id, int l, int r, int i, int x) {
        if(l == r) {
            a[id].mx = max(a[id].mx, x);
            a[id].add = 0;
            return;
        }
        push(id);
        int m = (l + r) / 2;
        if(i <= m) set(L(id), l, m, i, x);
        else       set(R(id), m + 1, r, i, x);
        pull(id);
    }
    int ask(int id, int l, int r, int L, int R) {
        if(l >= L && r <= R) return a[id].mx;
        push(id);
        int m = (l + r) / 2;
        int res = -INF;
        if(L <= m) res = max(res, ask(L(id), l, m, L, R));
        if(R > m)  res = max(res, ask(R(id), m + 1, r, L, R));
        return res;
    }
} seg, seg2, seg3;

int a1[MAXN];
int s1[MAXN];
int p1[MAXN];
int pr1[MAXN];
int t1[MAXN];

int a2[MAXN];
int s2[MAXN];
int p2[MAXN];
int pr2[MAXN];
int t2[MAXN];

// int su[MAXN][MAXN];
int dp[MAXN];

int32_t main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    // NYA =^-w-^=
    int n, m;
// #define QWQ
#ifndef QWQ
    cin >> n >> m;
    assert(n <= MAXN);
    For(i, 1, n) {
        cin >> a1[i] >> s1[i] >> p1[i];
        pr1[i] = pr1[i - 1] + a1[i];
    }
    For(i, 1, m) {
        cin >> a2[i] >> s2[i] >> p2[i];
        pr2[i] = pr2[i - 1] + a2[i];
    }
#else
    mt19937 rng(48763);
    n = m = 5;
    For(i, 1, n) {
        a1[i] = rng() % 10 + 1;
        s1[i] = rng() % 100 + 1;
        p1[i] = 1;
        pr1[i] = pr1[i - 1] + a1[i];
    }
    For(i, 1, m) {
        a2[i] = rng() % 10 + 1;
        s2[i] = rng() % 100 + 1;
        p2[i] = 1;
        pr2[i] = pr2[i - 1] + a2[i];
    }
#endif

    vector<pair<pii, int>> v;
    For(i, 1, n) {
        auto it = upper_bound(pr2, pr2 + m + 1, s1[i] - pr1[i]);
        t1[i] = it - pr2 - 1;
        if(t1[i] >= 0) v.eb(pii(t1[i], i), 1);
    }
    
    For(i, 1, m) {
        auto it = upper_bound(pr1, pr1 + n + 1, s2[i] - pr2[i]);
        t2[i] = it - pr1 - 1;
        if(p2[i] < 0 && t2[i] < n && t2[i] >= 0) v.eb(pii(i - 1, t2[i] + 1), 0);
    }

    sort(all(v));
    reverse(all(v));
    
    seg.init(-INF);
    seg2.init(0);
    for(auto &i:v) if(i.S) {
        seg2.add(0, 0, n, i.F.S, n, p1[i.F.S]);
    }
    seg.set(0, 0, n, 0, 0);

    For(it, 0, m) {
        if(it && (t2[it] >= 0)) {
            seg.add(0, 0, n, 0, t2[it], p2[it]);
        }
        while(sz(v) && v.back().F.F == it) {
            int i = v.back().F.S;
            int owo = v.back().S;
            // cout << v.back().F.F << " " << i << " " << owo << "\n" << flush;
            v.pop_back();

            if(owo) {
                seg2.add(0, 0, n, i, n, -p1[i]);
                seg.add(0, 0, n, i, n, p1[i]);
            }
            
            int val = seg.ask(0, 0, n, 0, i - 1) + seg2.ask(0, 0, n, i, i);
            if(owo) val += p1[i];
            seg.set(0, 0, n, i, val - seg2.ask(0, 0, n, i, i));
        }
    }
    cout << seg.ask(0, 0, n, 0, n) << "\n";
    return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 404 ms 159084 KB Output is correct
2 Correct 441 ms 159444 KB Output is correct
3 Correct 378 ms 159468 KB Output is correct
4 Correct 328 ms 157712 KB Output is correct
5 Correct 50 ms 125612 KB Output is correct
6 Correct 398 ms 158624 KB Output is correct
7 Correct 127 ms 140216 KB Output is correct
8 Correct 290 ms 145188 KB Output is correct
9 Correct 392 ms 160440 KB Output is correct
10 Correct 387 ms 153436 KB Output is correct
11 Correct 343 ms 153924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 51 ms 125552 KB Output is correct
2 Correct 65 ms 125516 KB Output is correct
3 Correct 56 ms 125644 KB Output is correct
4 Correct 54 ms 125516 KB Output is correct
5 Correct 50 ms 125572 KB Output is correct
6 Correct 49 ms 125620 KB Output is correct
7 Correct 50 ms 125564 KB Output is correct
8 Correct 60 ms 125524 KB Output is correct
9 Correct 57 ms 125516 KB Output is correct
10 Correct 54 ms 125648 KB Output is correct
11 Correct 48 ms 125516 KB Output is correct
12 Correct 50 ms 125568 KB Output is correct
13 Correct 50 ms 125648 KB Output is correct
14 Correct 53 ms 125644 KB Output is correct
15 Correct 51 ms 125560 KB Output is correct
16 Correct 49 ms 125560 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 51 ms 125552 KB Output is correct
2 Correct 65 ms 125516 KB Output is correct
3 Correct 56 ms 125644 KB Output is correct
4 Correct 54 ms 125516 KB Output is correct
5 Correct 50 ms 125572 KB Output is correct
6 Correct 49 ms 125620 KB Output is correct
7 Correct 50 ms 125564 KB Output is correct
8 Correct 60 ms 125524 KB Output is correct
9 Correct 57 ms 125516 KB Output is correct
10 Correct 54 ms 125648 KB Output is correct
11 Correct 48 ms 125516 KB Output is correct
12 Correct 50 ms 125568 KB Output is correct
13 Correct 50 ms 125648 KB Output is correct
14 Correct 53 ms 125644 KB Output is correct
15 Correct 51 ms 125560 KB Output is correct
16 Correct 49 ms 125560 KB Output is correct
17 Correct 52 ms 125952 KB Output is correct
18 Correct 59 ms 125856 KB Output is correct
19 Correct 61 ms 125884 KB Output is correct
20 Correct 54 ms 125900 KB Output is correct
21 Correct 53 ms 125960 KB Output is correct
22 Correct 52 ms 125864 KB Output is correct
23 Correct 52 ms 125872 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 51 ms 125552 KB Output is correct
2 Correct 65 ms 125516 KB Output is correct
3 Correct 56 ms 125644 KB Output is correct
4 Correct 54 ms 125516 KB Output is correct
5 Correct 50 ms 125572 KB Output is correct
6 Correct 49 ms 125620 KB Output is correct
7 Correct 50 ms 125564 KB Output is correct
8 Correct 60 ms 125524 KB Output is correct
9 Correct 57 ms 125516 KB Output is correct
10 Correct 54 ms 125648 KB Output is correct
11 Correct 48 ms 125516 KB Output is correct
12 Correct 50 ms 125568 KB Output is correct
13 Correct 50 ms 125648 KB Output is correct
14 Correct 53 ms 125644 KB Output is correct
15 Correct 51 ms 125560 KB Output is correct
16 Correct 49 ms 125560 KB Output is correct
17 Correct 52 ms 125952 KB Output is correct
18 Correct 59 ms 125856 KB Output is correct
19 Correct 61 ms 125884 KB Output is correct
20 Correct 54 ms 125900 KB Output is correct
21 Correct 53 ms 125960 KB Output is correct
22 Correct 52 ms 125864 KB Output is correct
23 Correct 52 ms 125872 KB Output is correct
24 Correct 394 ms 156788 KB Output is correct
25 Correct 302 ms 154204 KB Output is correct
26 Correct 394 ms 156868 KB Output is correct
27 Correct 309 ms 154424 KB Output is correct
28 Correct 418 ms 156240 KB Output is correct
29 Correct 357 ms 157392 KB Output is correct
30 Correct 647 ms 156616 KB Output is correct
31 Correct 120 ms 138660 KB Output is correct
32 Correct 303 ms 143488 KB Output is correct
33 Correct 391 ms 153988 KB Output is correct
34 Correct 563 ms 156376 KB Output is correct
35 Correct 604 ms 150276 KB Output is correct
36 Correct 570 ms 150304 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 51 ms 125552 KB Output is correct
2 Correct 65 ms 125516 KB Output is correct
3 Correct 56 ms 125644 KB Output is correct
4 Correct 54 ms 125516 KB Output is correct
5 Correct 50 ms 125572 KB Output is correct
6 Correct 49 ms 125620 KB Output is correct
7 Correct 50 ms 125564 KB Output is correct
8 Correct 60 ms 125524 KB Output is correct
9 Correct 57 ms 125516 KB Output is correct
10 Correct 54 ms 125648 KB Output is correct
11 Correct 48 ms 125516 KB Output is correct
12 Correct 50 ms 125568 KB Output is correct
13 Correct 50 ms 125648 KB Output is correct
14 Correct 53 ms 125644 KB Output is correct
15 Correct 51 ms 125560 KB Output is correct
16 Correct 49 ms 125560 KB Output is correct
17 Correct 52 ms 125952 KB Output is correct
18 Correct 59 ms 125856 KB Output is correct
19 Correct 61 ms 125884 KB Output is correct
20 Correct 54 ms 125900 KB Output is correct
21 Correct 53 ms 125960 KB Output is correct
22 Correct 52 ms 125864 KB Output is correct
23 Correct 52 ms 125872 KB Output is correct
24 Correct 394 ms 156788 KB Output is correct
25 Correct 302 ms 154204 KB Output is correct
26 Correct 394 ms 156868 KB Output is correct
27 Correct 309 ms 154424 KB Output is correct
28 Correct 418 ms 156240 KB Output is correct
29 Correct 357 ms 157392 KB Output is correct
30 Correct 647 ms 156616 KB Output is correct
31 Correct 120 ms 138660 KB Output is correct
32 Correct 303 ms 143488 KB Output is correct
33 Correct 391 ms 153988 KB Output is correct
34 Correct 563 ms 156376 KB Output is correct
35 Correct 604 ms 150276 KB Output is correct
36 Correct 570 ms 150304 KB Output is correct
37 Correct 431 ms 159784 KB Output is correct
38 Correct 332 ms 157496 KB Output is correct
39 Correct 428 ms 157108 KB Output is correct
40 Correct 417 ms 157144 KB Output is correct
41 Correct 54 ms 125516 KB Output is correct
42 Correct 664 ms 159724 KB Output is correct
43 Correct 440 ms 156824 KB Output is correct
44 Correct 645 ms 159276 KB Output is correct
45 Correct 667 ms 153308 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 51 ms 125552 KB Output is correct
2 Correct 65 ms 125516 KB Output is correct
3 Correct 56 ms 125644 KB Output is correct
4 Correct 54 ms 125516 KB Output is correct
5 Correct 50 ms 125572 KB Output is correct
6 Correct 49 ms 125620 KB Output is correct
7 Correct 50 ms 125564 KB Output is correct
8 Correct 60 ms 125524 KB Output is correct
9 Correct 57 ms 125516 KB Output is correct
10 Correct 54 ms 125648 KB Output is correct
11 Correct 48 ms 125516 KB Output is correct
12 Correct 50 ms 125568 KB Output is correct
13 Correct 50 ms 125648 KB Output is correct
14 Correct 53 ms 125644 KB Output is correct
15 Correct 51 ms 125560 KB Output is correct
16 Correct 49 ms 125560 KB Output is correct
17 Correct 52 ms 125952 KB Output is correct
18 Correct 59 ms 125856 KB Output is correct
19 Correct 61 ms 125884 KB Output is correct
20 Correct 54 ms 125900 KB Output is correct
21 Correct 53 ms 125960 KB Output is correct
22 Correct 52 ms 125864 KB Output is correct
23 Correct 52 ms 125872 KB Output is correct
24 Correct 394 ms 156788 KB Output is correct
25 Correct 302 ms 154204 KB Output is correct
26 Correct 394 ms 156868 KB Output is correct
27 Correct 309 ms 154424 KB Output is correct
28 Correct 418 ms 156240 KB Output is correct
29 Correct 357 ms 157392 KB Output is correct
30 Correct 647 ms 156616 KB Output is correct
31 Correct 120 ms 138660 KB Output is correct
32 Correct 303 ms 143488 KB Output is correct
33 Correct 391 ms 153988 KB Output is correct
34 Correct 563 ms 156376 KB Output is correct
35 Correct 604 ms 150276 KB Output is correct
36 Correct 570 ms 150304 KB Output is correct
37 Correct 431 ms 159784 KB Output is correct
38 Correct 332 ms 157496 KB Output is correct
39 Correct 428 ms 157108 KB Output is correct
40 Correct 417 ms 157144 KB Output is correct
41 Correct 54 ms 125516 KB Output is correct
42 Correct 664 ms 159724 KB Output is correct
43 Correct 440 ms 156824 KB Output is correct
44 Correct 645 ms 159276 KB Output is correct
45 Correct 667 ms 153308 KB Output is correct
46 Correct 1959 ms 251296 KB Output is correct
47 Correct 1593 ms 231188 KB Output is correct
48 Correct 1917 ms 244120 KB Output is correct
49 Correct 1904 ms 245212 KB Output is correct
50 Correct 4083 ms 247248 KB Output is correct
51 Correct 2391 ms 231428 KB Output is correct
52 Correct 3213 ms 243008 KB Output is correct
53 Correct 3863 ms 247316 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 404 ms 159084 KB Output is correct
2 Correct 441 ms 159444 KB Output is correct
3 Correct 378 ms 159468 KB Output is correct
4 Correct 328 ms 157712 KB Output is correct
5 Correct 50 ms 125612 KB Output is correct
6 Correct 398 ms 158624 KB Output is correct
7 Correct 127 ms 140216 KB Output is correct
8 Correct 290 ms 145188 KB Output is correct
9 Correct 392 ms 160440 KB Output is correct
10 Correct 387 ms 153436 KB Output is correct
11 Correct 343 ms 153924 KB Output is correct
12 Correct 51 ms 125552 KB Output is correct
13 Correct 65 ms 125516 KB Output is correct
14 Correct 56 ms 125644 KB Output is correct
15 Correct 54 ms 125516 KB Output is correct
16 Correct 50 ms 125572 KB Output is correct
17 Correct 49 ms 125620 KB Output is correct
18 Correct 50 ms 125564 KB Output is correct
19 Correct 60 ms 125524 KB Output is correct
20 Correct 57 ms 125516 KB Output is correct
21 Correct 54 ms 125648 KB Output is correct
22 Correct 48 ms 125516 KB Output is correct
23 Correct 50 ms 125568 KB Output is correct
24 Correct 50 ms 125648 KB Output is correct
25 Correct 53 ms 125644 KB Output is correct
26 Correct 51 ms 125560 KB Output is correct
27 Correct 49 ms 125560 KB Output is correct
28 Correct 52 ms 125952 KB Output is correct
29 Correct 59 ms 125856 KB Output is correct
30 Correct 61 ms 125884 KB Output is correct
31 Correct 54 ms 125900 KB Output is correct
32 Correct 53 ms 125960 KB Output is correct
33 Correct 52 ms 125864 KB Output is correct
34 Correct 52 ms 125872 KB Output is correct
35 Correct 394 ms 156788 KB Output is correct
36 Correct 302 ms 154204 KB Output is correct
37 Correct 394 ms 156868 KB Output is correct
38 Correct 309 ms 154424 KB Output is correct
39 Correct 418 ms 156240 KB Output is correct
40 Correct 357 ms 157392 KB Output is correct
41 Correct 647 ms 156616 KB Output is correct
42 Correct 120 ms 138660 KB Output is correct
43 Correct 303 ms 143488 KB Output is correct
44 Correct 391 ms 153988 KB Output is correct
45 Correct 563 ms 156376 KB Output is correct
46 Correct 604 ms 150276 KB Output is correct
47 Correct 570 ms 150304 KB Output is correct
48 Correct 431 ms 159784 KB Output is correct
49 Correct 332 ms 157496 KB Output is correct
50 Correct 428 ms 157108 KB Output is correct
51 Correct 417 ms 157144 KB Output is correct
52 Correct 54 ms 125516 KB Output is correct
53 Correct 664 ms 159724 KB Output is correct
54 Correct 440 ms 156824 KB Output is correct
55 Correct 645 ms 159276 KB Output is correct
56 Correct 667 ms 153308 KB Output is correct
57 Correct 397 ms 160216 KB Output is correct
58 Correct 462 ms 162460 KB Output is correct
59 Correct 542 ms 162764 KB Output is correct
60 Correct 437 ms 157992 KB Output is correct
61 Correct 713 ms 156772 KB Output is correct
62 Correct 50 ms 125540 KB Output is correct
63 Incorrect 729 ms 161364 KB Output isn't correct
64 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 404 ms 159084 KB Output is correct
2 Correct 441 ms 159444 KB Output is correct
3 Correct 378 ms 159468 KB Output is correct
4 Correct 328 ms 157712 KB Output is correct
5 Correct 50 ms 125612 KB Output is correct
6 Correct 398 ms 158624 KB Output is correct
7 Correct 127 ms 140216 KB Output is correct
8 Correct 290 ms 145188 KB Output is correct
9 Correct 392 ms 160440 KB Output is correct
10 Correct 387 ms 153436 KB Output is correct
11 Correct 343 ms 153924 KB Output is correct
12 Correct 51 ms 125552 KB Output is correct
13 Correct 65 ms 125516 KB Output is correct
14 Correct 56 ms 125644 KB Output is correct
15 Correct 54 ms 125516 KB Output is correct
16 Correct 50 ms 125572 KB Output is correct
17 Correct 49 ms 125620 KB Output is correct
18 Correct 50 ms 125564 KB Output is correct
19 Correct 60 ms 125524 KB Output is correct
20 Correct 57 ms 125516 KB Output is correct
21 Correct 54 ms 125648 KB Output is correct
22 Correct 48 ms 125516 KB Output is correct
23 Correct 50 ms 125568 KB Output is correct
24 Correct 50 ms 125648 KB Output is correct
25 Correct 53 ms 125644 KB Output is correct
26 Correct 51 ms 125560 KB Output is correct
27 Correct 49 ms 125560 KB Output is correct
28 Correct 52 ms 125952 KB Output is correct
29 Correct 59 ms 125856 KB Output is correct
30 Correct 61 ms 125884 KB Output is correct
31 Correct 54 ms 125900 KB Output is correct
32 Correct 53 ms 125960 KB Output is correct
33 Correct 52 ms 125864 KB Output is correct
34 Correct 52 ms 125872 KB Output is correct
35 Correct 394 ms 156788 KB Output is correct
36 Correct 302 ms 154204 KB Output is correct
37 Correct 394 ms 156868 KB Output is correct
38 Correct 309 ms 154424 KB Output is correct
39 Correct 418 ms 156240 KB Output is correct
40 Correct 357 ms 157392 KB Output is correct
41 Correct 647 ms 156616 KB Output is correct
42 Correct 120 ms 138660 KB Output is correct
43 Correct 303 ms 143488 KB Output is correct
44 Correct 391 ms 153988 KB Output is correct
45 Correct 563 ms 156376 KB Output is correct
46 Correct 604 ms 150276 KB Output is correct
47 Correct 570 ms 150304 KB Output is correct
48 Correct 431 ms 159784 KB Output is correct
49 Correct 332 ms 157496 KB Output is correct
50 Correct 428 ms 157108 KB Output is correct
51 Correct 417 ms 157144 KB Output is correct
52 Correct 54 ms 125516 KB Output is correct
53 Correct 664 ms 159724 KB Output is correct
54 Correct 440 ms 156824 KB Output is correct
55 Correct 645 ms 159276 KB Output is correct
56 Correct 667 ms 153308 KB Output is correct
57 Correct 1959 ms 251296 KB Output is correct
58 Correct 1593 ms 231188 KB Output is correct
59 Correct 1917 ms 244120 KB Output is correct
60 Correct 1904 ms 245212 KB Output is correct
61 Correct 4083 ms 247248 KB Output is correct
62 Correct 2391 ms 231428 KB Output is correct
63 Correct 3213 ms 243008 KB Output is correct
64 Correct 3863 ms 247316 KB Output is correct
65 Correct 397 ms 160216 KB Output is correct
66 Correct 462 ms 162460 KB Output is correct
67 Correct 542 ms 162764 KB Output is correct
68 Correct 437 ms 157992 KB Output is correct
69 Correct 713 ms 156772 KB Output is correct
70 Correct 50 ms 125540 KB Output is correct
71 Incorrect 729 ms 161364 KB Output isn't correct
72 Halted 0 ms 0 KB -