Submission #710947

#TimeUsernameProblemLanguageResultExecution timeMemory
710947NursikRestore Array (RMI19_restore)C++14
45 / 100
143 ms596 KiB
#include <iostream> #include <fstream> #include <iomanip> #include <vector> #include <set> #include <map> #include <cstring> #include <string> #include <cmath> #include <cassert> #include <ctime> #include <algorithm> #include <sstream> #include <list> #include <queue> #include <deque> #include <stack> #include <cstdlib> #include <cstdio> #include <iterator> #include <functional> #include <unordered_set> #include <unordered_map> #include <stdio.h> #include <bitset> #include <cstdint> #include <cassert> #include <functional> #include <complex> #include <random> using namespace std; #define ll long long #define pb push_back #define mp make_pair #define f first #define s second #define ld long double const ll maxn = 5e3 + 1, maxm = 1e4 + 1; const ll mod = 1e9 + 7, cmod = 998244353, inf = 1e9, block = 5000, p2 = 31, bit = 30; const ld eps = 1e-9; int n, m; int l[maxm], r[maxm], k[maxm], value[maxm], ans[maxn], used[maxn]; int pref[maxn]; int subtask1 = 1, subtask2 = 1; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); cin >> n >> m; for (int i = 1; i <= m; ++i){ cin >> l[i] >> r[i] >> k[i] >> value[i]; subtask1 &= (k[i] == 1); subtask2 &= (k[i] == 1 || k[i] == r[i] - l[i] + 1); } if (n <= 18){ for (int i = 0; i < (1 << n); ++i){ for (int j = 0; j < n; ++j){ if ((1 << j) & i){ pref[j] += 1; } if (j){ pref[j] += pref[j - 1]; } } int bad = 0; for (int j = 1; j <= m; ++j){ int dig = pref[r[j]] - (l[j] - 1 >= 0 ? pref[l[j] - 1] : 0); int len = r[j] - l[j] + 1; if (len - dig + 1 <= k[j]){ if (value[j] == 0){ bad = 1; } } else{ if (value[j] == 1){ bad = 1; } } } if (!bad){ for (int j = 0; j < n; ++j){ cout << (((1 << j) & i) > 0) << " "; } exit(0); } for (int j = 0; j < n; ++j){ pref[j] = 0; } } cout << -1; exit(0); } if (subtask1){ for (int i = 1; i <= m; ++i){ if (value[i] == 1){ for (int j = l[i]; j <= r[i]; ++j){ ans[j] = 1; } } } for (int i = 1; i <= m; ++i){ if (value[i] == 0){ int ok = 0; for (int j = l[i]; j <= r[i]; ++j){ if (ans[j] == 0){ ok = 1; } } if (!ok){ cout << -1; exit(0); } } } for (int i = 0; i < n; ++i){ cout << ans[i] << " "; } exit(0); } if (subtask2){ for (int i = 1; i <= m; ++i){ if (value[i] == 1 && k[i] == 1){ for (int j = l[i]; j <= r[i]; ++j){ ans[j] = 1; used[j] = 1; } } if (value[i] == 0 && k[i] == r[i] - l[i] + 1){ for (int j = l[i]; j <= r[i]; ++j){ ans[j] = 0; used[j] = 1; } } } int bad = 0; for (int i = 1; i <= m; ++i){ if (value[i] == 1 && k[i] == r[i] - l[i] + 1){ int ok = 0; for (int j = l[i]; j <= r[i]; ++j){ if (ans[j] == 1){ ok = 1; } } if (!ok){ for (int j = l[i]; j <= r[i]; ++j){ if (used[j] == 0){ ans[j] = 1; ok = 1; used[j] = 1; break; } } } if (!ok){ bad = 1; } } } for (int i = 1; i <= m; ++i){ if (value[i] == 0 && k[i] == 1){ int ok = 0; for (int j = l[i]; j <= r[i]; ++j){ if (ans[j] == 0){ ok = 1; } } if (!ok){ bad = 1; } } if (value[i] == 1 && k[i] == 1){ int ok = 1; for (int j = l[i]; j <= r[i]; ++j){ if (ans[j] == 0){ ok = 0; } } if (!ok){ bad = 1; } } if (value[i] == 0 && k[i] == r[i] - l[i] + 1){ int ok = 1; for (int j = l[i]; j <= r[i]; ++j){ if (ans[j] == 1){ ok = 0; } } if (!ok){ bad = 1; } } if (value[i] == 1 && k[i] == r[i] - l[i] + 1){ int ok = 0; for (int j = l[i]; j <= r[i]; ++j){ if (ans[j] == 1){ ok = 1; } } if (!ok){ bad = 1; } } } if (bad){ cout << -1; exit(0); } for (int i = 0; i < n; ++i){ cout << ans[i] << " "; } } } /* ajj, ajj, ajj, ajj, aj, aj, aj, aj, aj, aj, ak, ak, ak, ak, ak, ai, ai, ai */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...