Submission #782574

# Submission time Handle Problem Language Result Execution time Memory
782574 2023-07-14T05:44:36 Z resting Seats (IOI18_seats) C++17
100 / 100
3986 ms 251260 KB
#include "seats.h"
#include <bits/stdc++.h>
using namespace std;

#define set owo

//segment tree base
struct segtree {
    int l, r;
    segtree* lc, * rc;
    segtree* getmem();
    int mn = 0, mncnt;
    int lz = 0;
    segtree() : segtree(-1, -1) {};
    segtree(int l, int r) : l(l), r(r), mncnt(r - l + 1) {
        if (l == r) return;
        int m = (l + r) / 2;
        lc = getmem(); *lc = segtree(l, m);
        rc = getmem(); *rc = segtree(m + 1, r);
    }
    void apply(int x) {
        lz += x; mn += x;
    }
    void push() {
        if (l == r) return;
        lc->apply(lz); rc->apply(lz);
        lz = 0;
    }
    void pull() {
        mn = min(lc->mn, rc->mn); mncnt = 0;
        if (lc->mn == mn) mncnt += lc->mncnt;
        if (rc->mn == mn) mncnt += rc->mncnt;
    }
    void upd(int ql, int qr, int qv) {
        if (l > qr || r < ql) return;
        if (ql <= l && r <= qr) {
            apply(qv);
            return;
        }
        push();
        lc->upd(ql, qr, qv);
        rc->upd(ql, qr, qv);
        pull();
    }

    //debugging only
    int q(int v, int ad = 0) {
        ad += lz;
        if (l == r) return ad;
        if (v <= lc->r) return lc->q(v, ad);
        return rc->q(v, ad);
    }
}uwu, mem[4000005];
int memsz = 0;
segtree* segtree::getmem() { return &mem[memsz++]; }
vector<int> r, c;
int h, w, n, dx[] = { -1, 0, 1, 0, -1, 0 }, dy[] = { 0, -1, 0, 1, 0, 0 };
vector<vector<int>> g;

bool inbound(int r, int c) {
    return r >= 0 && c >= 0 && r < h && c < w;
}

void upd(int r, int c, int t) {
    for (int i = 0; i < 4; i++) {
        int a = inbound(r + dx[i], c + dy[i]) ? g[r + dx[i]][c + dy[i]] : n;
        int b = inbound(r + dx[i + 1], c + dy[i + 1]) ? g[r + dx[i + 1]][c + dy[i + 1]] : n;
        if (a > g[r][c] && b > g[r][c]) {
            uwu.upd(g[r][c], n - 1, t);
            uwu.upd(min(a, b), n - 1, -t);
        }
        if (a < g[r][c] && b < g[r][c]) {
            uwu.upd(max(a, b), n - 1, t);
            uwu.upd(g[r][c], n - 1, -t);
        }
    }
}

void set(int r, int c, int v) {
    for (int i = 1; i < 6; i++) {
        if (!inbound(r + dx[i], c + dy[i])) continue;
        upd(r + dx[i], c + dy[i], -1);
    }
    g[r][c] = v;
    for (int i = 1; i < 6; i++) {
        if (!inbound(r + dx[i], c + dy[i])) continue;
        upd(r + dx[i], c + dy[i], 1);
    }
}


void give_initial_chart(int H, int W, std::vector<int> R, std::vector<int> C) {
    n = H * W; h = H; w = W; r = R; c = C;
    uwu = segtree(0, n - 1);
    g = vector<vector<int>>(H, vector<int>(W, 0));
    for (int i = 0; i < n; i++) {
        g[r[i]][c[i]] = i;
    }
    for (int i = 0; i < n; i++) {
        upd(r[i], c[i], 1);
    }
}

int swap_seats(int a, int b) {
    set(r[a], c[a], b);
    set(r[b], c[b], a);
    swap(r[a], r[b]);
    swap(c[a], c[b]);
    return uwu.mncnt;
}
# Verdict Execution time Memory Grader output
1 Correct 77 ms 156912 KB Output is correct
2 Correct 79 ms 156928 KB Output is correct
3 Correct 88 ms 157004 KB Output is correct
4 Correct 78 ms 156948 KB Output is correct
5 Correct 79 ms 156928 KB Output is correct
6 Correct 82 ms 156968 KB Output is correct
7 Correct 86 ms 157004 KB Output is correct
8 Correct 92 ms 156940 KB Output is correct
9 Correct 85 ms 157008 KB Output is correct
10 Correct 86 ms 156984 KB Output is correct
11 Correct 82 ms 157004 KB Output is correct
12 Correct 72 ms 157008 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 77 ms 156912 KB Output is correct
2 Correct 79 ms 156928 KB Output is correct
3 Correct 88 ms 157004 KB Output is correct
4 Correct 78 ms 156948 KB Output is correct
5 Correct 79 ms 156928 KB Output is correct
6 Correct 82 ms 156968 KB Output is correct
7 Correct 86 ms 157004 KB Output is correct
8 Correct 92 ms 156940 KB Output is correct
9 Correct 85 ms 157008 KB Output is correct
10 Correct 86 ms 156984 KB Output is correct
11 Correct 82 ms 157004 KB Output is correct
12 Correct 72 ms 157008 KB Output is correct
13 Correct 132 ms 157276 KB Output is correct
14 Correct 136 ms 157260 KB Output is correct
15 Correct 97 ms 157324 KB Output is correct
16 Correct 91 ms 157808 KB Output is correct
17 Correct 117 ms 157300 KB Output is correct
18 Correct 139 ms 157284 KB Output is correct
19 Correct 117 ms 157336 KB Output is correct
20 Correct 104 ms 157516 KB Output is correct
21 Correct 92 ms 157304 KB Output is correct
22 Correct 97 ms 157804 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 2432 ms 184336 KB Output is correct
2 Correct 1025 ms 184332 KB Output is correct
3 Correct 930 ms 200328 KB Output is correct
4 Correct 963 ms 200328 KB Output is correct
5 Correct 995 ms 200320 KB Output is correct
6 Correct 972 ms 200332 KB Output is correct
7 Correct 978 ms 200268 KB Output is correct
8 Correct 952 ms 200324 KB Output is correct
9 Correct 950 ms 200324 KB Output is correct
10 Correct 974 ms 200320 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 128 ms 157160 KB Output is correct
2 Correct 232 ms 159428 KB Output is correct
3 Correct 966 ms 184784 KB Output is correct
4 Correct 2450 ms 200324 KB Output is correct
5 Correct 863 ms 204224 KB Output is correct
6 Correct 1793 ms 251260 KB Output is correct
7 Correct 956 ms 201500 KB Output is correct
8 Correct 1010 ms 200328 KB Output is correct
9 Correct 970 ms 200672 KB Output is correct
10 Correct 979 ms 203424 KB Output is correct
11 Correct 948 ms 223764 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 94 ms 157852 KB Output is correct
2 Correct 161 ms 157844 KB Output is correct
3 Correct 236 ms 157952 KB Output is correct
4 Correct 314 ms 158064 KB Output is correct
5 Correct 405 ms 158328 KB Output is correct
6 Correct 1362 ms 188932 KB Output is correct
7 Correct 1459 ms 189260 KB Output is correct
8 Correct 1344 ms 188804 KB Output is correct
9 Correct 2137 ms 188656 KB Output is correct
10 Correct 1307 ms 205140 KB Output is correct
11 Correct 1334 ms 205140 KB Output is correct
12 Correct 1273 ms 205088 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 77 ms 156912 KB Output is correct
2 Correct 79 ms 156928 KB Output is correct
3 Correct 88 ms 157004 KB Output is correct
4 Correct 78 ms 156948 KB Output is correct
5 Correct 79 ms 156928 KB Output is correct
6 Correct 82 ms 156968 KB Output is correct
7 Correct 86 ms 157004 KB Output is correct
8 Correct 92 ms 156940 KB Output is correct
9 Correct 85 ms 157008 KB Output is correct
10 Correct 86 ms 156984 KB Output is correct
11 Correct 82 ms 157004 KB Output is correct
12 Correct 72 ms 157008 KB Output is correct
13 Correct 132 ms 157276 KB Output is correct
14 Correct 136 ms 157260 KB Output is correct
15 Correct 97 ms 157324 KB Output is correct
16 Correct 91 ms 157808 KB Output is correct
17 Correct 117 ms 157300 KB Output is correct
18 Correct 139 ms 157284 KB Output is correct
19 Correct 117 ms 157336 KB Output is correct
20 Correct 104 ms 157516 KB Output is correct
21 Correct 92 ms 157304 KB Output is correct
22 Correct 97 ms 157804 KB Output is correct
23 Correct 2432 ms 184336 KB Output is correct
24 Correct 1025 ms 184332 KB Output is correct
25 Correct 930 ms 200328 KB Output is correct
26 Correct 963 ms 200328 KB Output is correct
27 Correct 995 ms 200320 KB Output is correct
28 Correct 972 ms 200332 KB Output is correct
29 Correct 978 ms 200268 KB Output is correct
30 Correct 952 ms 200324 KB Output is correct
31 Correct 950 ms 200324 KB Output is correct
32 Correct 974 ms 200320 KB Output is correct
33 Correct 128 ms 157160 KB Output is correct
34 Correct 232 ms 159428 KB Output is correct
35 Correct 966 ms 184784 KB Output is correct
36 Correct 2450 ms 200324 KB Output is correct
37 Correct 863 ms 204224 KB Output is correct
38 Correct 1793 ms 251260 KB Output is correct
39 Correct 956 ms 201500 KB Output is correct
40 Correct 1010 ms 200328 KB Output is correct
41 Correct 970 ms 200672 KB Output is correct
42 Correct 979 ms 203424 KB Output is correct
43 Correct 948 ms 223764 KB Output is correct
44 Correct 94 ms 157852 KB Output is correct
45 Correct 161 ms 157844 KB Output is correct
46 Correct 236 ms 157952 KB Output is correct
47 Correct 314 ms 158064 KB Output is correct
48 Correct 405 ms 158328 KB Output is correct
49 Correct 1362 ms 188932 KB Output is correct
50 Correct 1459 ms 189260 KB Output is correct
51 Correct 1344 ms 188804 KB Output is correct
52 Correct 2137 ms 188656 KB Output is correct
53 Correct 1307 ms 205140 KB Output is correct
54 Correct 1334 ms 205140 KB Output is correct
55 Correct 1273 ms 205088 KB Output is correct
56 Correct 209 ms 158472 KB Output is correct
57 Correct 402 ms 158484 KB Output is correct
58 Correct 675 ms 158856 KB Output is correct
59 Correct 1975 ms 201348 KB Output is correct
60 Correct 3986 ms 201276 KB Output is correct
61 Correct 1771 ms 201396 KB Output is correct
62 Correct 1524 ms 203136 KB Output is correct
63 Correct 3414 ms 202424 KB Output is correct
64 Correct 2005 ms 201612 KB Output is correct
65 Correct 1781 ms 201260 KB Output is correct
66 Correct 1963 ms 201524 KB Output is correct
67 Correct 2045 ms 204356 KB Output is correct
68 Correct 1706 ms 215572 KB Output is correct
69 Correct 3431 ms 224684 KB Output is correct