Submission #1170584

#TimeUsernameProblemLanguageResultExecution timeMemory
1170584InvMODRestore Array (RMI19_restore)C++20
0 / 100
185 ms99032 KiB
#include<bits/stdc++.h>

using namespace std;

#define sz(v) (int)(v).size()

struct Edge{
    int u,v,w;
    Edge(int _u = 0, int _v = 0, int _w = 0){
        u = _u,
        v = _v,
        w = _w;
    }
};

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    #define name "InvMOD"
    freopen(name".INP", "r", stdin);
    freopen(name".OUT", "w", stdout);

    int n,m; cin >> n >> m;

    vector<Edge> E;

    for(int i = 0; i < m; i++){
        int l,r,k,value;

        cin >> l >> r >> k >> value;

        /*
            k = 0:
            pref[r] - pref[l - 1] <= (r - l + 1) - k

            pref[l - 1] + (r - l + 1) - k >= pref[r]

            k = 1:

            pref[r] - pref[l - 1] >= (r - l + 1) - k + 1

            pref[r] - (r - l + 1) + k - 1 >= pref[l - 1]
        */

        l++, r++;

        if(!value){
            E.emplace_back(l - 1, r, (r - l + 1) - k);
        }
        else{
            E.emplace_back(r, l - 1, -(r - l + 1) + k - 1);
        }
    }

    for(int i = 1; i <= n; i++){
        E.emplace_back(i - 1, i, 1);
        E.emplace_back(i, i - 1, 0);
    }

    vector<int> ans(n + 1, n + 1);

    ans[0] = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < sz(E); j++){
            int u = E[j].u, v = E[j].v, w = E[j].w;

            if(ans[u] + w < ans[v]){
                ans[v] = ans[u] + w;
            }
        }
    }

    for(int j = 0; j < sz(E); j++){
        int u = E[j].u, v = E[j].v, w = E[j].w;

        if(ans[u] + w < ans[v]){
            cout << "-1\n";
            return 0;
        }
    }

    for(int i = 1; i <= n; i++){
        cout << ans[i] - ans[i - 1] << " ";
    } cout << "\n";

    return 0;
}

Compilation message (stderr)

restore.cpp: In function 'int main()':
restore.cpp:21:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   21 |     freopen(name".INP", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
restore.cpp:22:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   22 |     freopen(name".OUT", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...