#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { long n; int m; long s; cin >> n >> m >> s; vector<pair<long,long>> busy; for (int i = 0; i < m; i++) { long l; long r; cin >> l >> r; busy.push_back({ l,r }); } // Sortowanie po pierwszej wartości sort(busy.begin(), busy.end()); // Szukamy indeksu ze szkołą int pos = 0; bool found = false; while (pos < m && !found) { if (busy[pos].first <= s && s <= busy[pos].second) found = true; else pos++; } long wynik = 1; long droga = n; // Szukamy w lewo long f = busy[pos].first - 1; int left = pos-1; found = false; while (left >= 0 && !found) { if (busy[left].second == f) { f = busy[left].first - 1; left--; } else found = true; } if (f >= 2) { wynik = f; droga = s - f; } // Szukamy w prawo long l = busy[pos].second + 1; int right = pos + 1; found = false; while (right < m && !found && l - s < droga) { if (busy[right].first == l) { l = busy[right].second + 1; right++; } else found = true; } if (l <= n && l-s < droga) { wynik = l; } cout << wynik << endl; }
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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { long n; int m; long s; cin >> n >> m >> s; vector<pair<long,long>> busy; for (int i = 0; i < m; i++) { long l; long r; cin >> l >> r; busy.push_back({ l,r }); } // Sortowanie po pierwszej wartości sort(busy.begin(), busy.end()); // Szukamy indeksu ze szkołą int pos = 0; bool found = false; while (pos < m && !found) { if (busy[pos].first <= s && s <= busy[pos].second) found = true; else pos++; } long wynik = 1; long droga = n; // Szukamy w lewo long f = busy[pos].first - 1; int left = pos-1; found = false; while (left >= 0 && !found) { if (busy[left].second == f) { f = busy[left].first - 1; left--; } else found = true; } if (f >= 2) { wynik = f; droga = s - f; } // Szukamy w prawo long l = busy[pos].second + 1; int right = pos + 1; found = false; while (right < m && !found && l - s < droga) { if (busy[right].first == l) { l = busy[right].second + 1; right++; } else found = true; } if (l <= n && l-s < droga) { wynik = l; } cout << wynik << endl; } |