Submission #61178676


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

#define int long long
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define INF LONG_LONG_MAX

struct segtreemin {
    int n;
    vector<int> tree;

    segtreemin(int size) : n(size), tree(4 * size, INF) {}

    void build(const vector<int>& a, int v, int tl, int tr) {
        if (tl == tr) {
            tree[v] = a[tl];
        } else {
            int tm = (tl + tr) / 2;
            build(a, 2 * v + 1, tl, tm);
            build(a, 2 * v + 2, tm + 1, tr);
            tree[v] = min(tree[2 * v + 1], tree[2 * v + 2]);
        }
    }

    int query(int v, int tl, int tr, int l, int r) {
        if (l > r) return INF;
        if (l == tl && r == tr) return tree[v];
        int tm = (tl + tr) / 2;
        return min(query(2 * v + 1, tl, tm, l, min(r, tm)),
               query(2 * v + 2, tm + 1, tr, max(l, tm + 1), r));
    }

    void update(int v, int tl, int tr, int pos, int new_val) {
        if (tl == tr) {
            tree[v] = new_val;
        } else {
            int tm = (tl + tr) / 2;
            if (pos <= tm) update(2 * v + 1, tl, tm, pos, new_val);
            else update(2 * v + 2, tm + 1, tr, pos, new_val);
            tree[v] = min(tree[2 * v + 1], tree[2 * v + 2]);
        }
    }

    void build(const vector<int>& a) {
        build(a, 0, 0, n - 1);
    }

    int query(int l, int r) {
        return query(0, 0, n - 1, l, r);
    }

    void update(int pos, int new_val) {
        update(0, 0, n - 1, pos, new_val);
    }
};

struct segtree {
    int n;
    vector<int> tree;

    segtree(int size) : n(size), tree(4 * size) {}

    void build(const vector<int>& a, int v, int tl, int tr) {
        if (tl == tr) {
            tree[v] = a[tl];
        } else {
            int tm = (tl + tr) / 2;
            build(a, 2 * v + 1, tl, tm);
            build(a, 2 * v + 2, tm + 1, tr);
            tree[v] = max(tree[2 * v + 1], tree[2 * v + 2]);
        }
    }

    int query(int v, int tl, int tr, int l, int r) {
        if (l > r) return 0;
        if (l == tl && r == tr) return tree[v];
        int tm = (tl + tr) / 2;
        return max(query(2 * v + 1, tl, tm, l, min(r, tm)),
               query(2 * v + 2, tm + 1, tr, max(l, tm + 1), r));
    }

    void update(int v, int tl, int tr, int pos, int new_val) {
        if (tl == tr) {
            tree[v] = new_val;
        } else {
            int tm = (tl + tr) / 2;
            if (pos <= tm) update(2 * v + 1, tl, tm, pos, new_val);
            else update(2 * v + 2, tm + 1, tr, pos, new_val);
            tree[v] = max(tree[2 * v + 1], tree[2 * v + 2]);
        }
    }

    void build(const vector<int>& a) {
        build(a, 0, 0, n - 1);
    }

    int query(int l, int r) {
        return query(0, 0, n - 1, l, r);
    }

    void update(int pos, int new_val) {
        update(0, 0, n - 1, pos, new_val);
    }
};

signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int n, m;
    cin >> n >> m;
    set<int> a, b;
    vector<tuple<int, int, char>> v;
    while (m--) {
        int x, y;
        char c;
        cin >> x >> y >> c;
        a.insert(x);
        b.insert(y);
        v.emplace_back(x, y, c);
    }
    vector<int> A, B;
    for (int i : a) A.emplace_back(i);
    for (int i : b) B.emplace_back(i);
    segtreemin ox(A.size()), oy(B.size());
    segtree qx(A.size()), qy(B.size());
    for (auto [x, y, c] : v) {
        int l = lower_bound(all(A), x) - A.begin(), r = lower_bound(all(B), y) - B.begin();
        if (c == 'W') {
            if (qx.query(l, A.size() - 1) > y || qy.query(r, B.size() - 1) > x) return cout << "No", 0;
            int Y = ox.query(l, l), X = oy.query(r, r);
            if (Y > y) ox.update(l, y);
            if (X > x) oy.update(r, x);
        }
        else {
            if (ox.query(0, l) < y || oy.query(0, r) < x) return cout << "No", 0;
            int Y = qx.query(l, l), X = qy.query(r, r);
            if (Y < y) qx.update(l, y);
            if (X < x) qy.update(r, x);
        }
    }
    cout << "Yes";
    return 0;
}

Submission Info

Submission Time
Task D - Diagonal Separation
User JahonaliX
Language C++ 17 (gcc 12.2)
Score 425
Code Size 4246 Byte
Status AC
Exec Time 684 ms
Memory 56740 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 425 / 425
Status
AC × 4
AC × 63
Set Name Test Cases
Sample 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_00.txt, 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_test_00.txt, 01_test_01.txt, 01_test_02.txt, 01_test_03.txt, 01_test_04.txt, 01_test_05.txt, 01_test_06.txt, 01_test_07.txt, 01_test_08.txt, 01_test_09.txt, 01_test_10.txt, 01_test_11.txt, 01_test_12.txt, 01_test_13.txt, 01_test_14.txt, 01_test_15.txt, 01_test_16.txt, 01_test_17.txt, 01_test_18.txt, 01_test_19.txt, 01_test_20.txt, 01_test_21.txt, 01_test_22.txt, 01_test_23.txt, 01_test_24.txt, 01_test_25.txt, 01_test_26.txt, 01_test_27.txt, 01_test_28.txt, 01_test_29.txt, 01_test_30.txt, 01_test_31.txt, 01_test_32.txt, 01_test_33.txt, 01_test_34.txt, 01_test_35.txt, 01_test_36.txt, 01_test_37.txt, 01_test_38.txt, 01_test_39.txt, 01_test_40.txt, 01_test_41.txt, 01_test_42.txt, 01_test_43.txt, 01_test_44.txt, 01_test_45.txt, 01_test_46.txt, 01_test_47.txt, 01_test_48.txt, 01_test_49.txt, 01_test_50.txt, 01_test_51.txt, 01_test_52.txt, 01_test_53.txt, 01_test_54.txt, 01_test_55.txt, 01_test_56.txt, 01_test_57.txt, 01_test_58.txt
Case Name Status Exec Time Memory
00_sample_00.txt AC 1 ms 3648 KiB
00_sample_01.txt AC 1 ms 3516 KiB
00_sample_02.txt AC 1 ms 3420 KiB
00_sample_03.txt AC 1 ms 3512 KiB
01_test_00.txt AC 1 ms 3636 KiB
01_test_01.txt AC 1 ms 3520 KiB
01_test_02.txt AC 1 ms 3772 KiB
01_test_03.txt AC 1 ms 3588 KiB
01_test_04.txt AC 146 ms 9600 KiB
01_test_05.txt AC 131 ms 9584 KiB
01_test_06.txt AC 110 ms 9684 KiB
01_test_07.txt AC 42 ms 5052 KiB
01_test_08.txt AC 59 ms 6392 KiB
01_test_09.txt AC 59 ms 6412 KiB
01_test_10.txt AC 360 ms 56564 KiB
01_test_11.txt AC 193 ms 37812 KiB
01_test_12.txt AC 331 ms 56612 KiB
01_test_13.txt AC 81 ms 20300 KiB
01_test_14.txt AC 591 ms 56680 KiB
01_test_15.txt AC 487 ms 50396 KiB
01_test_16.txt AC 578 ms 56636 KiB
01_test_17.txt AC 289 ms 33328 KiB
01_test_18.txt AC 339 ms 56636 KiB
01_test_19.txt AC 63 ms 13536 KiB
01_test_20.txt AC 506 ms 56740 KiB
01_test_21.txt AC 203 ms 25920 KiB
01_test_22.txt AC 665 ms 56632 KiB
01_test_23.txt AC 82 ms 14256 KiB
01_test_24.txt AC 684 ms 56504 KiB
01_test_25.txt AC 110 ms 17068 KiB
01_test_26.txt AC 437 ms 56684 KiB
01_test_27.txt AC 400 ms 47308 KiB
01_test_28.txt AC 656 ms 56636 KiB
01_test_29.txt AC 161 ms 29280 KiB
01_test_30.txt AC 600 ms 56688 KiB
01_test_31.txt AC 271 ms 31840 KiB
01_test_32.txt AC 619 ms 56492 KiB
01_test_33.txt AC 236 ms 30736 KiB
01_test_34.txt AC 364 ms 28952 KiB
01_test_35.txt AC 273 ms 23876 KiB
01_test_36.txt AC 390 ms 28940 KiB
01_test_37.txt AC 59 ms 8780 KiB
01_test_38.txt AC 277 ms 28940 KiB
01_test_39.txt AC 198 ms 19084 KiB
01_test_40.txt AC 369 ms 28864 KiB
01_test_41.txt AC 79 ms 11108 KiB
01_test_42.txt AC 358 ms 29032 KiB
01_test_43.txt AC 46 ms 7744 KiB
01_test_44.txt AC 362 ms 29116 KiB
01_test_45.txt AC 135 ms 14932 KiB
01_test_46.txt AC 500 ms 56568 KiB
01_test_47.txt AC 99 ms 18484 KiB
01_test_48.txt AC 469 ms 56544 KiB
01_test_49.txt AC 204 ms 43732 KiB
01_test_50.txt AC 474 ms 56564 KiB
01_test_51.txt AC 204 ms 37776 KiB
01_test_52.txt AC 360 ms 56628 KiB
01_test_53.txt AC 324 ms 49804 KiB
01_test_54.txt AC 381 ms 29112 KiB
01_test_55.txt AC 20 ms 5728 KiB
01_test_56.txt AC 318 ms 28948 KiB
01_test_57.txt AC 47 ms 7748 KiB
01_test_58.txt AC 1 ms 3500 KiB