#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; } |
English