제출 #333317

#제출 시각아이디문제언어결과실행 시간메모리
333317keko37Restore Array (RMI19_restore)C++14
20 / 100
673 ms1004 KiB
#include<bits/stdc++.h>

using namespace std;

typedef long long llint;
typedef pair <int, int> pi;

const int MAXN = 5005;

int n, m;
int dist[MAXN];
vector <pi> v[MAXN];

bool relax () {
    bool ok = 0;
    for (int i = 0; i <= n + 1; i++) {
        for (auto pp : v[i]) {
            int sus = pp.first, w = pp.second;
            if (dist[sus] > dist[i] + w) {
                dist[sus] = dist[i] + w;
                ok = 1;
            }
        }
    }
    return ok;
}

int main () {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        v[i - 1].push_back({i, 1});
        v[i].push_back({i - 1, 0});
    }
    for (int i = 0; i < m; i++) {
        int lef, rig, k, val;
        cin >> lef >> rig >> k >> val;
        lef++; rig++;
        if (val == 0) {
            v[lef - 1].push_back({rig, rig - lef + 1 - k});
        } else {
            v[rig].push_back({lef - 1, k-1 - (rig - lef + 1)});
        }
    }
    for (int i = 0; i <= n; i++) {
        v[n + 1].push_back({i, 0});
    }
    for (int i = 0; i < n + 1; i++) {
        if (!relax()) break;
    }
    if (relax()) {
        cout << -1;
        return 0;
    }
    for (int i = 1; i <= n; i++) {
        cout << dist[i] - dist[i - 1] << " ";
    }
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...