제출 #1164266

#제출 시각아이디문제언어결과실행 시간메모리
1164266PakinDioxideRestore Array (RMI19_restore)C++17
13 / 100
64 ms1156 KiB
#include <bits/stdc++.h>

using namespace std;

int main() {
    int n, q;
    cin >> n >> q;
    int a[n];
    for (int i = 0; i < n; i++) a[i] = 1;
    vector <tuple <int, int, int, int, int>> v; // idx, add [1] or remove [0], value, id, min [1] or max [0]
    for (int i = 0; i < q; i++) {
        int l, r, k, c;
        cin >> l >> r >> k >> c;
        v.emplace_back(l, 1, (c == 0 ? k : k-1), i, !c);
        v.emplace_back(r+1, 0, 0, i, !c);
    }
    sort(v.begin(), v.end());
    int v_i = 0, ok = 1;
    vector <pair <int, int>> mn, mx;
    for (int i = 0; i <= n; i++) {
        while (v_i < v.size() && get<0>(v[v_i]) == i) {
            auto [idx, t, val, id, mm] = v[v_i];
            if (t == 1) {
                if (mm) mn.emplace_back(val, id);
                else mx.emplace_back(val, id);
            } else {
                if (mm) for (int j = 0; j < mn.size(); j++) {if (mn[j].second == id && mn[j].first > 0) ok = 0;}
                else for (int j = 0; j < mx.size(); j++) {if (mx[j].second == id) mx[j].first = n;}
            }
            v_i++;
        }
        if (i == n) break;
        int cnv = n;
        for (auto e : mx) cnv = min(cnv, e.first);
        if (cnv) {
            a[i] = 0;
            for (auto &e : mn) e.first--;
            for (auto &e : mx) e.first--;
        }
    }
    int cnv = 0;
    for (auto e : mn) cnv = max(cnv, e.first);
    if (!ok || cnv) cout << -1 << '\n';
    else {for (auto e : a) cout << e << ' '; cout << '\n';}
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...