#include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n, m, s; cin >> n >> m >> s; vector<pair<long long, long long>> przedzialy; long long l, r; for (int i = 0; i < m; i++) { cin >> l >> r; przedzialy.push_back({l, r}); } sort(przedzialy.begin(), przedzialy.end()); long long szukany_przedzial = -1; for (long long i = 0; i < m; i++) { auto [pierwsza, druga] = przedzialy[i]; if (s >= pierwsza && s <= druga) { szukany_przedzial = i; break; } } //cout << szukany_przedzial << endl; long long wynik_w_prawo = LLONG_MAX, wynik_w_lewo = LLONG_MAX; if (szukany_przedzial == 0 && przedzialy[szukany_przedzial].first - 1 >= 1) { wynik_w_lewo = przedzialy[szukany_przedzial].first - 1; } else { for (int i = szukany_przedzial; i >= 1; i--) // ruch w lewo { if (przedzialy[i].first - przedzialy[i - 1].second > 1) { wynik_w_lewo = przedzialy[i].first - 1; //cout << wynik_w_lewo; break; } } } if (wynik_w_lewo == LLONG_MAX && przedzialy[0].first > 1) { wynik_w_lewo = przedzialy[0].first - 1; } for (int i = szukany_przedzial; i < m - 1; i++) // ruch w prawo { if (przedzialy[i + 1].first - przedzialy[i].second > 1) { wynik_w_prawo = przedzialy[i].second + 1; //cout << wynik_w_prawo; break; } } if (szukany_przedzial == m - 1 && przedzialy[szukany_przedzial].second < n) { wynik_w_prawo = przedzialy[szukany_przedzial].second + 1; } if (szukany_przedzial != m - 1 && wynik_w_prawo == LLONG_MAX && przedzialy[m - 1].second < n) { wynik_w_prawo = przedzialy[m - 1].second + 1; } //cout << wynik_w_prawo << " " << wynik_w_lewo; long long dist_lewo = abs(s - wynik_w_lewo); long long dist_prawo = abs(s - wynik_w_prawo); // cout << endl << dist_lewo << " " << dist_prawo; if (dist_lewo < dist_prawo) cout << wynik_w_lewo; else if (dist_prawo < dist_lewo) cout << wynik_w_prawo; else cout << min(wynik_w_prawo, wynik_w_lewo); }
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 | #include <bits/stdc++.h> using namespace std; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); long long n, m, s; cin >> n >> m >> s; vector<pair<long long, long long>> przedzialy; long long l, r; for (int i = 0; i < m; i++) { cin >> l >> r; przedzialy.push_back({l, r}); } sort(przedzialy.begin(), przedzialy.end()); long long szukany_przedzial = -1; for (long long i = 0; i < m; i++) { auto [pierwsza, druga] = przedzialy[i]; if (s >= pierwsza && s <= druga) { szukany_przedzial = i; break; } } //cout << szukany_przedzial << endl; long long wynik_w_prawo = LLONG_MAX, wynik_w_lewo = LLONG_MAX; if (szukany_przedzial == 0 && przedzialy[szukany_przedzial].first - 1 >= 1) { wynik_w_lewo = przedzialy[szukany_przedzial].first - 1; } else { for (int i = szukany_przedzial; i >= 1; i--) // ruch w lewo { if (przedzialy[i].first - przedzialy[i - 1].second > 1) { wynik_w_lewo = przedzialy[i].first - 1; //cout << wynik_w_lewo; break; } } } if (wynik_w_lewo == LLONG_MAX && przedzialy[0].first > 1) { wynik_w_lewo = przedzialy[0].first - 1; } for (int i = szukany_przedzial; i < m - 1; i++) // ruch w prawo { if (przedzialy[i + 1].first - przedzialy[i].second > 1) { wynik_w_prawo = przedzialy[i].second + 1; //cout << wynik_w_prawo; break; } } if (szukany_przedzial == m - 1 && przedzialy[szukany_przedzial].second < n) { wynik_w_prawo = przedzialy[szukany_przedzial].second + 1; } if (szukany_przedzial != m - 1 && wynik_w_prawo == LLONG_MAX && przedzialy[m - 1].second < n) { wynik_w_prawo = przedzialy[m - 1].second + 1; } //cout << wynik_w_prawo << " " << wynik_w_lewo; long long dist_lewo = abs(s - wynik_w_lewo); long long dist_prawo = abs(s - wynik_w_prawo); // cout << endl << dist_lewo << " " << dist_prawo; if (dist_lewo < dist_prawo) cout << wynik_w_lewo; else if (dist_prawo < dist_lewo) cout << wynik_w_prawo; else cout << min(wynik_w_prawo, wynik_w_lewo); } |