Submission #1259742

#TimeUsernameProblemLanguageResultExecution timeMemory
1259742user736482Alternating Current (BOI18_alternating)C++20
0 / 100
3094 ms16048 KiB

#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define MOD 1000000007
#define INF 1000000019
#define POT (1<<20)
#define INFL 1000000000000000099LL

ll n,m,a,b,c;
vector<pair<pair<ll,ll>,ll>>wej;//dlugosc,pocz
ll nxt[100007],pop[100007],co[100007];
vector<ll>v[100007];
ll sm1[100007],sm2[100007];
vector<pair<pair<ll,ll>,ll>>usu,uzy;
void st(ll x,ll y){
    co[x]=y;
    for(ll i : v[x])st(i,y^1);
}
int main(){
    ios_base::sync_with_stdio(0);cin.tie(0);
    cin>>n>>m;
    for(ll i=0;i<n;i++){
        nxt[i]=(i+1)%n;
        pop[i]=(i+n-1)%n;
    }
    for(ll i=0;i<m;i++){
        co[i]=-1;
        cin>>a>>b;
        a--;
        b%=n;
        if(b<=a)b+=n;
        wej.pb({{b-a,a},i});
    }
    sort(wej.begin(),wej.end());
    reverse(wej.begin(),wej.end());
    for(ll i=0;i<m;i++){
        wej[i].ff={wej[i].ff.ss,wej[i].ff.ff+wej[i].ff.ss};
    }
    set<pair<pair<ll,ll>,ll>>s;
    for(auto i : wej){
        if(s.empty()){
            uzy.pb(i);
            s.insert(i);
        }
        else{
            if((*s.begin()).ff.ff<=i.ff.ff){
                auto ak=*--s.lower_bound({{i.ff.ff,INFL},INFL});
                if(ak.ff.ss>=i.ff.ss){
                    usu.pb(i);
                    co[i.ss]=ak.ss;
                    v[ak.ss].pb(i.ss);
                }
                else{
                    uzy.pb(i);

                    s.insert(i);
                }
            }
            else{
                auto ak=*--s.end();
                if(ak.ff.ff<=i.ff.ff && ak.ff.ss>=i.ff.ss){
                    usu.pb(i);
                    v[ak.ss].pb(i.ss);
                    co[i.ss]=ak.ss;
                }
                else{
                    uzy.pb(i);
                    s.insert(i);
                }
            }
        }
    }
    sort(uzy.begin(),uzy.end());
    for(auto i : usu){
        auto j=i.ff;
     //   cout<<j.ff<<" "<<j.ss<<"\n";
        if(j.ss>=n){
            sm1[0]++;
            sm1[j.ss-n]--;
            sm1[j.ff]++;
            sm1[n]--;
        }
        else{
            sm1[j.ss]--;
            sm1[j.ff]++;
        }
    }
   // cout<<"\n";
    for(auto i : uzy){
        auto j=i.ff;
     //   cout<<j.ff<<" "<<j.ss<<"\n";
        if(j.ss>=n){
            sm2[0]++;
            sm2[j.ss-n]--;
            sm2[j.ff]++;
            sm2[n]--;
        }
        else{
            sm2[j.ss]--;
            sm2[j.ff]++;
        }
    }
    
    sm2[0]+=sm1[0];
    for(ll i=1;i<n;i++){
        sm2[i]+=sm1[i]+sm2[i-1];
        sm1[i]+=sm1[i-1];
    }
    ll strt=-1;
    uzy.pb(uzy[0]);
    uzy.back().ff.ff+=n;
    for(ll i=0;i<uzy.size()-1;i++){
        auto j=uzy[i].ff;
        auto k=uzy[i+1].ff;
        bool bl=1;
        for(ll p=k.ff;p<j.ss;p++){
            if(sm2[p%n]<3)bl=0;
        }
        if(bl==1)strt=(i+1)%(uzy.size());
    }
    uzy.pop_back();
    for(ll i=0;i<n;i++){
       // cout<<sm1[i]<<" "<<sm2[i]<<"\n";
    }
    if(uzy.size()%2==0)strt=0;
    else if(strt==-1){
        cout<<"impossible";return 0;
    }
    for(ll i=0;i<n;i++){
        if(sm2[i]<2){
            cout<<"impossible";return 0;
        }
    }
    bool bl=0;
    for(ll i=strt;i<strt+(uzy.size());i++){
        st(uzy[i%uzy.size()].ss,bl);
        bl^=1;
    }
    for(ll i=0;i<m;i++)cout<<co[i];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...