제출 #493736

#제출 시각아이디문제언어결과실행 시간메모리
493736CristianRestore Array (RMI19_restore)C++14
20 / 100
18 ms600 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]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, i, ns, b, subtask, ok; 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; } 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...