#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |