#include <bits/stdc++.h> #define ll long long using namespace std; const ll INF = 1000000000100; ll n, s; int m; vector<pair<ll, ll>> taken; int findSchoolPrzedzial() { int l = 0; int r = m - 1; while(l < r) { int mid = (l + r) / 2; if(taken[mid].first <= s && s <= taken[mid].second) return mid; if(s < taken[mid].first) r = mid - 1; else l = mid + 1; } return l; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> s; taken.resize(m); for(int i = 0; i < m; i++) { ll a, b; cin >> a >> b; taken[i] = { a, b }; } sort(taken.begin(), taken.end()); int idx = findSchoolPrzedzial(); ll closestLeft = -INF; for(int i = idx; i > 0; i--) { if(taken[i].first - 1 > taken[i - 1].second) { closestLeft = taken[i].first - 1; break; } } if(closestLeft == -INF && taken[0].first > 1) closestLeft = taken[0].first - 1; ll closestRight = INF; for(int i = idx; i < m - 1; i++) { if(taken[i].second + 1 < taken[i + 1].first) { closestRight = taken[i].second + 1; break; } } if(closestRight == INF && taken[m - 1].second < n) closestRight = taken[m - 1].second + 1; ll diffLeft = s - closestLeft; ll diffRight = closestRight - s; if(closestLeft == -INF) cout << closestRight; else if(closestRight == INF) cout << closestLeft; else if(diffLeft <= diffRight) cout << closestLeft; else cout << closestRight; 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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | #include <bits/stdc++.h> #define ll long long using namespace std; const ll INF = 1000000000100; ll n, s; int m; vector<pair<ll, ll>> taken; int findSchoolPrzedzial() { int l = 0; int r = m - 1; while(l < r) { int mid = (l + r) / 2; if(taken[mid].first <= s && s <= taken[mid].second) return mid; if(s < taken[mid].first) r = mid - 1; else l = mid + 1; } return l; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m >> s; taken.resize(m); for(int i = 0; i < m; i++) { ll a, b; cin >> a >> b; taken[i] = { a, b }; } sort(taken.begin(), taken.end()); int idx = findSchoolPrzedzial(); ll closestLeft = -INF; for(int i = idx; i > 0; i--) { if(taken[i].first - 1 > taken[i - 1].second) { closestLeft = taken[i].first - 1; break; } } if(closestLeft == -INF && taken[0].first > 1) closestLeft = taken[0].first - 1; ll closestRight = INF; for(int i = idx; i < m - 1; i++) { if(taken[i].second + 1 < taken[i + 1].first) { closestRight = taken[i].second + 1; break; } } if(closestRight == INF && taken[m - 1].second < n) closestRight = taken[m - 1].second + 1; ll diffLeft = s - closestLeft; ll diffRight = closestRight - s; if(closestLeft == -INF) cout << closestRight; else if(closestRight == INF) cout << closestLeft; else if(diffLeft <= diffRight) cout << closestLeft; else cout << closestRight; return 0; } |