/*
Cred : SunnyYeahBoi
It's my last chance (⌐■_■)
Problem :
*/
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define endl "\n"
#define NAME "a"
const int MAXN = 1e6 + 5;
const int inf = 1e18;
const int MOD = 1e9 + 7;
void FileInput(){
if(fopen(NAME".inp" , "r") == NULL)
freopen(NAME".inp" , "w" , stdout);
freopen(NAME".inp" , "r" , stdin);
freopen(NAME".out" , "w" , stdout);
}
int k , n;
int a[MAXN] , b[MAXN];
int seat[MAXN];
vector<pair<int , int>> query;
struct Cmp{
bool operator ()(pair<int , pair<int , int>> a , pair<int , pair<int , int>> b){
if(a.first == b.first)
return a.second.first > b.second.first;
return a.first < b.first;
}
};
void solve(){
cin >> k >> n;
for(int i = 1 ; i <= n ; i++){
cin >> a[i] >> b[i];
query.push_back({a[i] , i});
query.push_back({b[i] , i});
seat[i] = -1;
}
sort(query.begin() , query.end());
// for(auto x : query)
// cout << x.first << " " << x.second << endl;
set<pair<int , int>> set1;
set<pair<int , pair<int , int>> , Cmp> set2;
set1.insert({1 , k});
set2.insert({k , {1 , k}});
for(auto temp : query){
int id = temp.second;
int x = seat[id];
if(seat[id] == -1){ // đi vào
int l , r;
auto it = set2.end();
--it;
l = (*it).second.first;
r = (*it).second.second;
// cout << it -> first << " " << it -> second.first << " " << it -> second.second << endl;
set2.erase(it);
set1.erase({l , r});
int mid = (l + r) / 2;
seat[id] = mid;
// cout << "SEAT " << l << " " << r << " " << mid << " " << id << endl;
if(l <= mid - 1){
set1.insert({l , mid - 1});
set2.insert({mid - l , {l , mid - 1}});
}
if(mid + 1 <= r){
set1.insert({mid + 1 , r});
set2.insert({r - mid , {mid + 1 , r}});
}
}else if(seat[id] != -1){ // đi ra
auto it = set1.upper_bound({x , 0});
auto it2 = it;
if(!set1.empty()) it2--;
// cout << "ERASE " << x << endl;
pair<int , int> nwSeg = {x , x};
if(!set1.empty() && it != set1.end() && it -> first == x + 1){
nwSeg.second = it -> second;
set2.erase({it->second - it->first + 1 , *it});
set1.erase(it);
}
if(!set1.empty() && it2 -> second == x - 1){
nwSeg.first = it2 -> first;
set2.erase({(*it2).second - (*it2).first + 1 , *it2});
set1.erase(*it2);
}
set1.insert(nwSeg);
set2.insert({nwSeg.second - nwSeg.first + 1 , nwSeg});
}
// for(auto x : set2)
// cout << temp.first << " " << temp.second << " " << x.first << " " << x.second.first << " " << x.second.second << endl;
}
for(int i = 1 ; i <= n ; i++)
cout << seat[i] << " ";
}
int32_t main(){
//FileInput();
ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int t = 1;
// cin >> t;
while(t--)
solve();
return 0;
}
LyoKICAgIENyZWQgOiBTdW5ueVllYWhCb2kKICAgIEl0J3MgbXkgbGFzdCBjaGFuY2UgKOKMkOKWoF/ilqApCiAgICBQcm9ibGVtIDoKKi8KCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgZG91YmxlIGxvbmcgZG91YmxlCiNkZWZpbmUgZW5kbCAiXG4iCiNkZWZpbmUgTkFNRSAiYSIKCmNvbnN0IGludCBNQVhOID0gMWU2ICsgNTsKY29uc3QgaW50IGluZiA9IDFlMTg7CmNvbnN0IGludCBNT0QgPSAxZTkgKyA3OwoKdm9pZCBGaWxlSW5wdXQoKXsKICAgIGlmKGZvcGVuKE5BTUUiLmlucCIgLCAiciIpID09IE5VTEwpCiAgICAgICAgZnJlb3BlbihOQU1FIi5pbnAiICwgInciICwgc3Rkb3V0KTsKICAgIGZyZW9wZW4oTkFNRSIuaW5wIiAsICJyIiAsIHN0ZGluKTsKICAgIGZyZW9wZW4oTkFNRSIub3V0IiAsICJ3IiAsIHN0ZG91dCk7Cn0KCmludCBrICwgbjsKaW50IGFbTUFYTl0gLCBiW01BWE5dOwppbnQgc2VhdFtNQVhOXTsKdmVjdG9yPHBhaXI8aW50ICwgaW50Pj4gcXVlcnk7CgpzdHJ1Y3QgQ21wewogICAgYm9vbCBvcGVyYXRvciAoKShwYWlyPGludCAsIHBhaXI8aW50ICwgaW50Pj4gYSAsIHBhaXI8aW50ICwgcGFpcjxpbnQgLCBpbnQ+PiBiKXsKICAgICAgICBpZihhLmZpcnN0ID09IGIuZmlyc3QpCiAgICAgICAgICAgIHJldHVybiBhLnNlY29uZC5maXJzdCA+IGIuc2Vjb25kLmZpcnN0OwogICAgICAgIHJldHVybiBhLmZpcnN0IDwgYi5maXJzdDsKICAgIH0KfTsKCnZvaWQgc29sdmUoKXsKICAgIGNpbiA+PiBrID4+IG47CiAgICBmb3IoaW50IGkgPSAxIDsgaSA8PSBuIDsgaSsrKXsKICAgICAgICBjaW4gPj4gYVtpXSA+PiBiW2ldOwogICAgICAgIHF1ZXJ5LnB1c2hfYmFjayh7YVtpXSAsIGl9KTsKICAgICAgICBxdWVyeS5wdXNoX2JhY2soe2JbaV0gLCBpfSk7CiAgICAgICAgc2VhdFtpXSA9IC0xOwogICAgfQoKICAgIAogICAgc29ydChxdWVyeS5iZWdpbigpICwgcXVlcnkuZW5kKCkpOwogICAgLy8gZm9yKGF1dG8geCA6IHF1ZXJ5KQogICAgLy8gICAgIGNvdXQgPDwgeC5maXJzdCA8PCAiICIgPDwgeC5zZWNvbmQgPDwgZW5kbDsKICAgIAogICAgc2V0PHBhaXI8aW50ICwgaW50Pj4gc2V0MTsKICAgIHNldDxwYWlyPGludCAsIHBhaXI8aW50ICwgaW50Pj4gLCBDbXA+IHNldDI7CgogICAgc2V0MS5pbnNlcnQoezEgLCBrfSk7CiAgICBzZXQyLmluc2VydCh7ayAsIHsxICwga319KTsKCiAgICBmb3IoYXV0byB0ZW1wIDogcXVlcnkpewogICAgICAgIGludCBpZCA9IHRlbXAuc2Vjb25kOwogICAgICAgIGludCB4ID0gc2VhdFtpZF07CiAgICAKICAgICAgICBpZihzZWF0W2lkXSA9PSAtMSl7IC8vIMSRaSB2w6BvCiAgICAgICAgICAgIGludCBsICwgcjsKICAgICAgICAgICAgYXV0byBpdCA9IHNldDIuZW5kKCk7CiAgICAgICAgICAgIC0taXQ7CiAgICAgICAgICAgIAogICAgICAgICAgICBsID0gKCppdCkuc2Vjb25kLmZpcnN0OwogICAgICAgICAgICByID0gKCppdCkuc2Vjb25kLnNlY29uZDsKCiAgICAgICAgICAgIC8vIGNvdXQgPDwgaXQgLT4gZmlyc3QgPDwgIiAiIDw8IGl0IC0+IHNlY29uZC5maXJzdCA8PCAiICIgPDwgaXQgLT4gc2Vjb25kLnNlY29uZCA8PCBlbmRsOwogICAgICAgICAgICAKICAgICAgICAgICAgc2V0Mi5lcmFzZShpdCk7CiAgICAgICAgICAgIHNldDEuZXJhc2Uoe2wgLCByfSk7CiAgICAgICAgICAgIAogICAgICAgICAgICBpbnQgbWlkID0gKGwgKyByKSAvIDI7CiAgICAgICAgICAgIHNlYXRbaWRdID0gbWlkOwogICAgICAgICAgICAvLyBjb3V0IDw8ICJTRUFUICIgPDwgbCA8PCAiICIgPDwgciA8PCAiICIgPDwgbWlkIDw8ICIgIiA8PCBpZCA8PCBlbmRsOwoKICAgICAgICAgICAgaWYobCA8PSBtaWQgLSAxKXsKICAgICAgICAgICAgICAgIHNldDEuaW5zZXJ0KHtsICwgbWlkIC0gMX0pOwogICAgICAgICAgICAgICAgc2V0Mi5pbnNlcnQoe21pZCAtIGwgLCB7bCAsIG1pZCAtIDF9fSk7CiAgICAgICAgICAgIH0KICAgICAgICAKICAgICAgICAgICAgaWYobWlkICsgMSA8PSByKXsKICAgICAgICAgICAgICAgIHNldDEuaW5zZXJ0KHttaWQgKyAxICwgcn0pOwogICAgICAgICAgICAgICAgc2V0Mi5pbnNlcnQoe3IgLSBtaWQgLCB7bWlkICsgMSAsIHJ9fSk7CiAgICAgICAgICAgIH0KICAgICAgICB9ZWxzZSBpZihzZWF0W2lkXSAhPSAtMSl7IC8vIMSRaSByYQogICAgICAgICAgICBhdXRvIGl0ID0gc2V0MS51cHBlcl9ib3VuZCh7eCAsIDB9KTsKICAgICAgICAgICAgYXV0byBpdDIgPSBpdDsKICAgICAgICAgICAgaWYoIXNldDEuZW1wdHkoKSkgaXQyLS07CgogICAgICAgICAgICAvLyBjb3V0IDw8ICJFUkFTRSAiIDw8IHggPDwgZW5kbDsKCiAgICAgICAgICAgIHBhaXI8aW50ICwgaW50PiBud1NlZyA9IHt4ICwgeH07CiAgICAgICAgICAgIGlmKCFzZXQxLmVtcHR5KCkgJiYgaXQgIT0gc2V0MS5lbmQoKSAmJiBpdCAtPiBmaXJzdCA9PSB4ICsgMSl7CiAgICAgICAgICAgICAgICBud1NlZy5zZWNvbmQgPSBpdCAtPiBzZWNvbmQ7CgogICAgICAgICAgICAgICAgc2V0Mi5lcmFzZSh7aXQtPnNlY29uZCAtIGl0LT5maXJzdCArIDEgLCAqaXR9KTsKICAgICAgICAgICAgICAgIHNldDEuZXJhc2UoaXQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZighc2V0MS5lbXB0eSgpICYmIGl0MiAtPiBzZWNvbmQgPT0geCAtIDEpewogICAgICAgICAgICAgICAgbndTZWcuZmlyc3QgPSBpdDIgLT4gZmlyc3Q7CgogICAgICAgICAgICAgICAgc2V0Mi5lcmFzZSh7KCppdDIpLnNlY29uZCAtICgqaXQyKS5maXJzdCArIDEgLCAqaXQyfSk7CiAgICAgICAgICAgICAgICBzZXQxLmVyYXNlKCppdDIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzZXQxLmluc2VydChud1NlZyk7CiAgICAgICAgICAgIHNldDIuaW5zZXJ0KHtud1NlZy5zZWNvbmQgLSBud1NlZy5maXJzdCArIDEgLCBud1NlZ30pOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvLyBmb3IoYXV0byB4IDogc2V0MikKICAgICAgICAvLyAgICAgY291dCA8PCB0ZW1wLmZpcnN0IDw8ICIgIiA8PCB0ZW1wLnNlY29uZCA8PCAiICIgPDwgeC5maXJzdCA8PCAiICIgPDwgeC5zZWNvbmQuZmlyc3QgPDwgIiAiIDw8IHguc2Vjb25kLnNlY29uZCA8PCBlbmRsOwoKICAgIH0KCiAgICBmb3IoaW50IGkgPSAxIDsgaSA8PSBuIDsgaSsrKQogICAgICAgIGNvdXQgPDwgc2VhdFtpXSA8PCAiICI7Cn0KCmludDMyX3QgbWFpbigpewogICAgLy9GaWxlSW5wdXQoKTsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbiA+PiB0OwogICAgd2hpbGUodC0tKQogICAgICAgIHNvbHZlKCk7CiAgICByZXR1cm4gMDsKfQ==