#include <iostream> #include <utility> #include <vector> #include <algorithm> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n; int m; long long s; cin >> n >> m >> s; vector<pair<long long, long long>> przedzialy; przedzialy.reserve(m); long long l, r; for (int i = 0; i < m; i++) { cin >> l >> r; pair<long long, long long> przedzial = {l, r}; przedzialy.push_back(przedzial); } // sortujemy przedzialy (od tego najbardziej na lewo) sort(przedzialy.begin(), przedzialy.end(), [](const pair<long long, long long> &a, const pair<long long, long long> &b) { return a.first < b.first; }); // szukanie najlepszego miejsca po lewej long long na_lewo = s - 1; int i = m - 1; while (!(przedzialy[i].first <= s - 1 && przedzialy[i].second >= s - 1)) { i--; if (i < 0) { break; } } while (i >= 0) { na_lewo = przedzialy[i].first - 1; i--; if (i >= 0 && przedzialy[i].second < na_lewo) { break; } } // szukanie prawego odstepu long long na_prawo = s + 1; i = 0; while (!(przedzialy[i].first <= s + 1 && przedzialy[i].second >= s + 1)) { i++; if (i >= m) { break; } } while (i < m) { na_prawo = przedzialy[i].second + 1; i++; if (i < m && przedzialy[i].first > na_prawo) { break; } } if (na_prawo > n) { cout << na_lewo << "\n"; } else if (na_lewo <= 0) { cout << na_prawo << "\n"; } else if (s - na_lewo <= na_prawo - s) { cout << na_lewo << "\n"; } else { cout << na_prawo << "\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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | #include <iostream> #include <utility> #include <vector> #include <algorithm> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n; int m; long long s; cin >> n >> m >> s; vector<pair<long long, long long>> przedzialy; przedzialy.reserve(m); long long l, r; for (int i = 0; i < m; i++) { cin >> l >> r; pair<long long, long long> przedzial = {l, r}; przedzialy.push_back(przedzial); } // sortujemy przedzialy (od tego najbardziej na lewo) sort(przedzialy.begin(), przedzialy.end(), [](const pair<long long, long long> &a, const pair<long long, long long> &b) { return a.first < b.first; }); // szukanie najlepszego miejsca po lewej long long na_lewo = s - 1; int i = m - 1; while (!(przedzialy[i].first <= s - 1 && przedzialy[i].second >= s - 1)) { i--; if (i < 0) { break; } } while (i >= 0) { na_lewo = przedzialy[i].first - 1; i--; if (i >= 0 && przedzialy[i].second < na_lewo) { break; } } // szukanie prawego odstepu long long na_prawo = s + 1; i = 0; while (!(przedzialy[i].first <= s + 1 && przedzialy[i].second >= s + 1)) { i++; if (i >= m) { break; } } while (i < m) { na_prawo = przedzialy[i].second + 1; i++; if (i < m && przedzialy[i].first > na_prawo) { break; } } if (na_prawo > n) { cout << na_lewo << "\n"; } else if (na_lewo <= 0) { cout << na_prawo << "\n"; } else if (s - na_lewo <= na_prawo - s) { cout << na_lewo << "\n"; } else { cout << na_prawo << "\n"; } } |