제출 #1164230

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

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    int a[n], ok = 1;
    memset(a, 0, sizeof(a));
    vector <tuple <int, int, int, int, int>> v;
    for (int i = 1; i <= m; i++) {
        int l, r, k, c;
        cin >> l >> r >> k >> c;
        v.emplace_back(l, r-l+1-k+c, c, i, 1);
        v.emplace_back(r+1, -(r-l+1-k+c), c, i, 0);
    }
    sort(v.begin(), v.end());
    vector <pair <int, int>> mn, mx;
    for (int i = 0; i < v.size(); i++) {
        auto [idx, k, c, id, t] = v[i];
        if (t) {
            if (c) mn.emplace_back(k, id);
            else mx.emplace_back(k, id);
        } else {
            if (c) {
                for (int j = 0; j < mn.size(); j++) if (mn[j].second == id) {if (mn[j].first > 0) ok = 0; mn[j].first = 0; break;}
            } else {
                for (int j = 0; j < mx.size(); j++) if (mx[j].second == id) {mx[j].first = n; break;}
            }
        }
        if (i < v.size()-1 && get<0>(v[i+1]) == idx) continue;
        if (t == 0) continue;
        int mmx = n;
        for (auto e : mx) mmx = min(mmx, e.first);
        if (0 < mmx) {
            a[idx] = 1;
            for (auto &e : mn) e.first--;
            for (auto &e : mx) e.first--;
        }
    }
    if (!ok) {cout << -1 << '\n'; return 0;}
    for (int 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...