Submission #493754

#TimeUsernameProblemLanguageResultExecution timeMemory
493754CristianRestore Array (RMI19_restore)C++14
20 / 100
16 ms460 KiB
#include <iostream> using namespace std; const int NMAX = 10005; int v[NMAX], sp[NMAX], l[NMAX], r[NMAX], k[NMAX], value[NMAX], SP1[NMAX], SP0[NMAX], set1[NMAX], set0[NMAX], SP[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 <= n; i++) v[i] = 2; for(i = 1; i <= m; i++) { if(k[i] != 1 || value[i] != 1) continue; SP1[r[i] + 1]--; SP1[l[i]]++; } for(i = 1; i <= n; i++) { SP1[i] += SP1[i-1]; if(SP1[i]) v[i] = 1; } // k = r - l + 1 si value == 0 for(i = 1; i <= m; i++) { if(k[i] == 1 || value[i] == 1) continue; SP0[r[i] + 1]--; SP0[l[i]]++; } for(i = 1; i <= n; i++) { SP0[i] += SP0[i-1]; if(SP0[i]) v[i] = 0; if(SP0[i] && SP1[i]) { cout << "-1"; return 0; } } for(i = 1; i <= m; i++) { if(k[i] == r[i] - l[i] + 1 && value[i] == 1) { ok = 0; for(i = l[i]; i <= r[i]; i++) { if(v[i] == 1) ok = 1; if(v[i] == 2 && !ok) { ok = 1; v[i] = 1; } } if(!ok) { cout << "-1"; return 0; } } if(k[i] == 1 && value[i] == 0) { ok = 0; for(i = l[i]; i <= r[i] && ok; i++) { if(v[i] == 0) ok = 1; if(v[i] == 2 && !ok) { ok = 1; v[i] = 0; } } if(!ok) { cout << "-1"; return 0; } } } for(i = 1; i <= n; i++) cout << min(v[i], 1) << ' '; } return 0; }

Compilation message (stderr)

restore.cpp: In function 'int main()':
restore.cpp:10:38: warning: unused variable 'j' [-Wunused-variable]
   10 |     int n, m, i, ns, b, subtask, ok, j;
      |                                      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...