// Homura Akemi a.k.a. Starrykiller (/user/235125)
// I love Madoka Kaname forever!
#include <bits/stdc++.h>
using namespace std;
auto range(auto l, auto r) { return views::iota(l,r); }
auto rev=views::reverse;
_GLIBCXX_ALWAYS_INLINE void chmax(auto &a, auto b) { a=max(a,b); }
_GLIBCXX_ALWAYS_INLINE void chmin(auto &a, auto b) { a=min(a,b); }
#define int long long
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
// int T; cin>>T;
int T=1;
while (T--) []{
int n, m, s;
cin>>n>>m>>s;
set<pair<int,int>> odt={{1,n}};
auto split=[&](int x) {
// [l,x-1], [x,r]
// returns [x,r]
auto it=odt.lower_bound({x,0});
if (it!=end(odt) && it->first==x) return it;
auto [L,R]=*--it; odt.erase(it);
cerr<<L<<' '<<R<<' '<<x<<'\n';
// assert(L<=x&&x<=R);
it=odt.emplace(L,x-1).first;
if (x>R)
return ++it;
return odt.emplace(x,R).first;
};
while (m--) {
int l, r; cin>>l>>r;
auto itr=split(r+1);
// for (auto [l,r]: odt) cerr<<"("<<l<<","<<r<<")";
// cerr<<'\n';
auto itl=split(l);
// for (auto [l,r]: odt) cerr<<"("<<l<<","<<r<<")";
// cerr<<'\n';
odt.erase(itl,itr);
// for (auto [l,r]: odt) cerr<<"("<<l<<","<<r<<")";
// cerr<<'\n';
// cerr<<"------------\n";
}
int ans=1e18, u=0;
for (auto [l,r]: odt) {
// cerr<<l<<' '<<r<<'\n';
if (abs(s-l)<ans) ans=abs(s-l), u=l;
if (abs(s-r)<ans) ans=abs(s-r), u=r;
}
cout<<u<<'\n';
}();
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | // Homura Akemi a.k.a. Starrykiller (/user/235125) // I love Madoka Kaname forever! #include <bits/stdc++.h> using namespace std; auto range(auto l, auto r) { return views::iota(l,r); } auto rev=views::reverse; _GLIBCXX_ALWAYS_INLINE void chmax(auto &a, auto b) { a=max(a,b); } _GLIBCXX_ALWAYS_INLINE void chmin(auto &a, auto b) { a=min(a,b); } #define int long long signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); // int T; cin>>T; int T=1; while (T--) []{ int n, m, s; cin>>n>>m>>s; set<pair<int,int>> odt={{1,n}}; auto split=[&](int x) { // [l,x-1], [x,r] // returns [x,r] auto it=odt.lower_bound({x,0}); if (it!=end(odt) && it->first==x) return it; auto [L,R]=*--it; odt.erase(it); cerr<<L<<' '<<R<<' '<<x<<'\n'; // assert(L<=x&&x<=R); it=odt.emplace(L,x-1).first; if (x>R) return ++it; return odt.emplace(x,R).first; }; while (m--) { int l, r; cin>>l>>r; auto itr=split(r+1); // for (auto [l,r]: odt) cerr<<"("<<l<<","<<r<<")"; // cerr<<'\n'; auto itl=split(l); // for (auto [l,r]: odt) cerr<<"("<<l<<","<<r<<")"; // cerr<<'\n'; odt.erase(itl,itr); // for (auto [l,r]: odt) cerr<<"("<<l<<","<<r<<")"; // cerr<<'\n'; // cerr<<"------------\n"; } int ans=1e18, u=0; for (auto [l,r]: odt) { // cerr<<l<<' '<<r<<'\n'; if (abs(s-l)<ans) ans=abs(s-l), u=l; if (abs(s-r)<ans) ans=abs(s-r), u=r; } cout<<u<<'\n'; }(); } |
English