Submission #493738

#TimeUsernameProblemLanguageResultExecution timeMemory
493738CristianRestore Array (RMI19_restore)C++14
20 / 100
18 ms588 KiB
#include <iostream> using namespace std; const int NMAX = 10005; int v[NMAX], sp[NMAX], l[NMAX], r[NMAX], k[NMAX], value[NMAX], SP[NMAX], set1[NMAX], set0[NMAX]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, i, ns, b, subtask, ok, j; cin >> n >> m; subtask = 2; for(i = 1; i <= m; i++) { cin >> l[i] >> r[i] >> k[i] >> value[i]; l[i]++; r[i]++; if(k[i] != 1) subtask = 3; } /// Subtask #1 if(n <= 18 && m <= 200) { ns = (1 << n); for(b = 0; b < ns; b++) { sp[0] = 0; for(i = 1; i <= n; i++) { sp[i] = sp[i - 1]; if((1 << (i-1)) & b) sp[i]++; } ok = 1; for(i = 1; i <= m; i++) { if(value[i] == 0 && sp[r[i]] - sp[l[i] - 1] > r[i] - l[i] - k[i] + 1) { ok = 0; break; } if(value[i] == 1 && sp[r[i]] - sp[l[i] - 1] < r[i] - l[i] - k[i] + 2) { ok = 0; break; } } if(ok) { for(i = 1; i <= n; i++) { cout << sp[i] - sp[i-1] << ' '; } return 0; } } cout << "-1"; return 0; } /// Subtask #2 if(subtask == 2) { for(i = 1; i <= m; i++) { if(value[i] == 1) { SP[r[i] + 1]--; SP[l[i]]++; } } for(i = 1; i <= n; i++) { SP[i] += SP[i-1]; if(SP[i]) v[i] = 1; else v[i] = 0; sp[i] = sp[i-1] + v[i]; } ok = 1; for(i = 1; i <= m; i++) { if(value[i] == 0 && sp[r[i]] - sp[l[i] - 1] > r[i] - l[i] - k[i] + 1) { ok = 0; break; } if(value[i] == 1 && sp[r[i]] - sp[l[i] - 1] < r[i] - l[i] - k[i] + 2) { ok = 0; break; } } if(!ok) { cout << "-1"; return 0; } for(i = 1; i <= n; i++) cout << v[i] << ' '; return 0; } if(subtask == 3) { // k = 1 for(i = 1; i <= m; i++) { if(k[i] != 1 || value[i] != 1) continue; SP[r[i] + 1]--; SP[l[i]]++; } for(i = 1; i <= n; i++) { SP[i] += SP[i-1]; if(SP[i]) v[i] = 1; else v[i] = 0; SP[i-1] = 0; } SP[n] = 0; // k = r - l + 1 si value == 0 for(i = 1; i <= m; i++) { if(k[i] == 1 || value[i] == 1) continue; SP[r[i] + 1]--; SP[l[i]]++; } for(i = 1; i <= n; i++) { SP[i] += SP[i-1]; if(SP[i]) v[i] = -1; SP[i-1] = 0; } SP[n] = 0; // k = r - l + 1 si value = 1 for(i = 1; i <= n; i++) { set1[i] = set1[i-1]; set0[i] = set0[i-1]; if(v[i] == 1) set1[i]++; if(v[i] == -1) set0[i]++; } for(i = 1; i <= m; i++) { if(k[i] == 1 || value[i] == 0) continue; if(set1[r[i]] - set1[l[i] -1] != 0) continue; if(set0[r[i]] - set0[l[i] - 1] == k[i]) { cout << "-1"; return 0; } for(j = l[i]; j <= r[i]; j++) if(v[i] == 0) { v[i] = 1; break; } } for(i = 1; i <= n; i++) sp[i] = sp[i-1] + v[i]; ok = 1; for(i = 1; i <= m; i++) { if(value[i] == 0 && sp[r[i]] - sp[l[i] - 1] > r[i] - l[i] - k[i] + 1) { ok = 0; break; } if(value[i] == 1 && sp[r[i]] - sp[l[i] - 1] < r[i] - l[i] - k[i] + 2) { ok = 0; break; } } if(!ok) { cout << "-1"; return 0; } for(i = 1; i <= n; i++) cout << v[i] << ' '; } 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...