#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
using LL=long long;
using LD=long double;
#define FOR(i,l,r) for(auto i=(l);i<=(r);++i)
#define ROF(i,l,r) for(auto i=(l);i>=(r);--i)
#define REP(i,n) FOR(i,0,(n)-1)
#define ITF(e,c) for(auto&e:(c))
#define ssize(x) int(x.size())
#ifdef DEBUG
auto operator<<(auto&o,auto p)->decltype(p.first,o){return o<<'('<<p.first<<", "<<p.second<<')';}
auto operator<<(auto&o,auto&x)->decltype(x.end(),o){o<<'{';int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<'}';}
#define debug(x...) cerr<<"["#x"]: ",[](auto...$){((cerr<<$<<"; "),...);}(x),cerr<<'\n'
#else
#define debug(...) {}
#endif
LL N,S;
int M;
set<pair<LL,bool>> rgs;
int main() {
cin.tie(0)->sync_with_stdio(0);
/// input
{
cin>>N>>M>>S;
LL l,r;
REP(i,M) {
cin>>l>>r;
if (rgs.count({l-1,1})) rgs.erase({l-1,1});
else rgs.insert({l,0});
if (rgs.count({r+1,0})) rgs.erase({r+1,0});
else rgs.insert({r,1});
}
debug(rgs);
}
/// output
{
debug(S);
auto it = ranges::lower_bound(rgs, pair{S,true});
if (it->first == N) cout << prev(it)->first-1;
else if (prev(it)->first == 1) cout << it->first+1;
else {
if (abs(S-(it->first+1)) < abs(S-(prev(it)->first-1))) cout << it->first+1 << endl;
else cout << prev(it)->first-1 << endl;
}
}
return 0;
}
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 | #include <bits/stdc++.h> using namespace std; #define endl '\n' using LL=long long; using LD=long double; #define FOR(i,l,r) for(auto i=(l);i<=(r);++i) #define ROF(i,l,r) for(auto i=(l);i>=(r);--i) #define REP(i,n) FOR(i,0,(n)-1) #define ITF(e,c) for(auto&e:(c)) #define ssize(x) int(x.size()) #ifdef DEBUG auto operator<<(auto&o,auto p)->decltype(p.first,o){return o<<'('<<p.first<<", "<<p.second<<')';} auto operator<<(auto&o,auto&x)->decltype(x.end(),o){o<<'{';int i=0;for(auto e:x)o<<(", ")+2*!i++<<e;return o<<'}';} #define debug(x...) cerr<<"["#x"]: ",[](auto...$){((cerr<<$<<"; "),...);}(x),cerr<<'\n' #else #define debug(...) {} #endif LL N,S; int M; set<pair<LL,bool>> rgs; int main() { cin.tie(0)->sync_with_stdio(0); /// input { cin>>N>>M>>S; LL l,r; REP(i,M) { cin>>l>>r; if (rgs.count({l-1,1})) rgs.erase({l-1,1}); else rgs.insert({l,0}); if (rgs.count({r+1,0})) rgs.erase({r+1,0}); else rgs.insert({r,1}); } debug(rgs); } /// output { debug(S); auto it = ranges::lower_bound(rgs, pair{S,true}); if (it->first == N) cout << prev(it)->first-1; else if (prev(it)->first == 1) cout << it->first+1; else { if (abs(S-(it->first+1)) < abs(S-(prev(it)->first-1))) cout << it->first+1 << endl; else cout << prev(it)->first-1 << endl; } } return 0; } |
English