Submission #493983

#TimeUsernameProblemLanguageResultExecution timeMemory
493983leakedRestore Array (RMI19_restore)C++14
45 / 100
421 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==0 && 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]=0;
            }
        }
    }
    sort(all(arr));
    auto check=[&](){
        int ok=1;
        for(auto &z : arr){
            if(z[2]==z[1]-z[0] && 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]==-1 && !kk){
                            kk=1;
                            a[i]=1;
                        }
                    }
                }
                if(!kk)
                    return 0;
            }
            else if(z[3]==0 && z[2]==1){
                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]==-1 && !kk){
                            kk=1;
                            a[i]=0;
                        }
                    }
                }
                if(!kk)
                    return 0;
            }
        }
        return ok;
    };
    if(!check()){
        cout<<-1;
    }
    else
        for(auto &z : a){
            if(z==-1)
                z=0;
            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...