제출 #493980

#제출 시각아이디문제언어결과실행 시간메모리
493980leakedRestore Array (RMI19_restore)C++14
7 / 100
452 ms716 KiB
#include <bits/stdc++.h> #define f first #define s second #define m_p make_pair #define vec vector #define sz(x) (int)(x).size() #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define fast_rmi ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0); using namespace std; signed main(){ fast_rmi; int n,m; cin>>n>>m; vec<array<int,4>>arr(m); vec<array<int,4>>arrt(m); for(auto &z : arr){ cin>>z[0]>>z[1]>>z[2]>>z[3]; if(z[3]==1) z[2]=z[2]-1; // cout<<"L R "<<z[0]<<' '<<z[1]<<' '<<z[2]<<' '<<"TYPE "<<z[3]<<endl; } auto brute=[&](){ for(int mask=0;mask<(1<<n);mask++){ vec<int>a(n); for(int i=0;i<n;i++){ if(mask&(1<<i)) a[i]=1; else a[i]=0; } auto check=[&](){ int ok=1; for(auto &z : arr){ int cnt=0; for(int i=z[0];i<=z[1];i++) cnt+=(!a[i]); if(z[3]) ok&=(cnt<=z[2]); else{ ok&=(cnt>=z[2]); } } return ok; }; if(check()){ return a; } } return vec<int>(); }; if(n<=18){ vec<int> ans=brute(); if(!sz(ans)){ cout<<-1; return 0; } for(auto &z : ans) cout<<z<<' '; return 0; } arrt=arr; vec<int> a(n,-1); for(int i=0;i<m;i++){ int l=arr[i][0]; int r=arr[i][1]; int k=arr[i][2]; int t=arr[i][3]; if(k==1 && t==1){ for(int i=l;i<=r;i++){ if(a[i]==0){ cout<<-1; return 0; } a[i]=1; } } else if(k==r-l+1 && t==0){ for(int i=l;i<=r;i++){ if(a[i]==1){ cout<<-1; return 0; } a[i]=1; } } } sort(all(arr)); auto check=[&](){ int ok=1; for(auto &z : arr){ if(z[2]==z[1]-z[0]+1 && z[3]==1){ int kk=0; for(int i=z[0];i<=z[1];i++){ kk|=(a[i]==1); } if(!kk){ for(int i=z[0];i<=z[1];i++){ if(a[i]==2 && !kk){ kk=1; a[i]=1; } } } if(!kk) return 0; } else{ int kk=0; for(int i=z[0];i<=z[1];i++){ kk|=(a[i]==0); } if(!kk){ for(int i=z[0];i<=z[1];i++){ if(a[i]==2 && !kk){ kk=1; a[i]=0; } } } if(!kk) return 0; } } return ok; }; if(!check()){ cout<<-1; } else for(auto &z : a) cout<<z<<' '; 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...