#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll,ll> ll_pair;
vector <ll_pair> seg;
void read(int m){
ll x, y;
for(int i = 0; i < m; i++){
cin >> x >> y;
seg.push_back({x, y});
}
return;
}
vector <ll> v;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll n, m, s;
cin >> n >> m >> s;
read(m);
sort(seg.begin(), seg.end());
ll ans = 1;
for(int i = 0; i < seg.size(); i++){
if(ans <= s){
if(seg[i].first <= ans && seg[i].second >= ans) ans = seg[i].second + 1;
else{
v.push_back(ans);
if(i == 0 || (i != 0 && seg[i].first - 1 != seg[i - 1].second)){
ans = seg[i].first - 1;
}
else ans = seg[i].second + 1;
}
if(i + 1 == seg.size() && ans < n) v.push_back(ans);
}
else break;
}
ans = n;
for(int i = seg.size() - 1; i >= 0; i--){
if(ans >= s){
if(seg[i].first <= ans && seg[i].second >= ans) ans = seg[i].first - 1;
else{
v.push_back(ans);
if(i == seg.size() - 1 || (i != seg.size() - 1 && seg[i].second + 1 != seg[i + 1].first)){
ans = seg[i].second + 1;
}
else ans = seg[i].first - 1;
}
if(i == 0 && ans > 0) v.push_back(ans);
}
else break;
}
sort(v.begin(), v.end(), [&](const ll& a, const ll& b){
if(abs(s - a) == abs(s - b)){
return a < b;
}
return abs(s - a) < abs(s - b);
});
cout << v[0] << "\n";
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 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll,ll> ll_pair; vector <ll_pair> seg; void read(int m){ ll x, y; for(int i = 0; i < m; i++){ cin >> x >> y; seg.push_back({x, y}); } return; } vector <ll> v; int main(){ ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); ll n, m, s; cin >> n >> m >> s; read(m); sort(seg.begin(), seg.end()); ll ans = 1; for(int i = 0; i < seg.size(); i++){ if(ans <= s){ if(seg[i].first <= ans && seg[i].second >= ans) ans = seg[i].second + 1; else{ v.push_back(ans); if(i == 0 || (i != 0 && seg[i].first - 1 != seg[i - 1].second)){ ans = seg[i].first - 1; } else ans = seg[i].second + 1; } if(i + 1 == seg.size() && ans < n) v.push_back(ans); } else break; } ans = n; for(int i = seg.size() - 1; i >= 0; i--){ if(ans >= s){ if(seg[i].first <= ans && seg[i].second >= ans) ans = seg[i].first - 1; else{ v.push_back(ans); if(i == seg.size() - 1 || (i != seg.size() - 1 && seg[i].second + 1 != seg[i + 1].first)){ ans = seg[i].second + 1; } else ans = seg[i].first - 1; } if(i == 0 && ans > 0) v.push_back(ans); } else break; } sort(v.begin(), v.end(), [&](const ll& a, const ll& b){ if(abs(s - a) == abs(s - b)){ return a < b; } return abs(s - a) < abs(s - b); }); cout << v[0] << "\n"; return 0; } |
English