#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
int main() {
long long n, m, s;
std::cin >> n >> m >> s;
std::vector<std::pair<long long, long long>> intervals;
for (int i = 0; i < m; i++) {
long long l, r;
std::cin >> l >> r;
intervals.emplace_back(l, r);
}
std::sort(intervals.begin(), intervals.end());
long long left = s - 1, right = s + 1;
long long closest = LLONG_MAX;
while (left >= 1) {
bool occupied = false;
for (auto &[l, r] : intervals) {
if (left >= l && left <= r) {
occupied = true;
left = l - 1;
break;
}
}
if (!occupied) {
closest = left;
break;
}
}
while (right <= n) {
bool occupied = false;
for (auto &[l, r] : intervals) {
if (right >= l && right <= r) {
occupied = true;
right = r + 1;
break;
}
}
if (!occupied) {
if (closest == LLONG_MAX || std::abs(s - right) < std::abs(s - closest)) {
closest = right;
}
break;
}
}
std::cout << closest << std::endl;
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 | #include <iostream> #include <vector> #include <algorithm> #include <climits> int main() { long long n, m, s; std::cin >> n >> m >> s; std::vector<std::pair<long long, long long>> intervals; for (int i = 0; i < m; i++) { long long l, r; std::cin >> l >> r; intervals.emplace_back(l, r); } std::sort(intervals.begin(), intervals.end()); long long left = s - 1, right = s + 1; long long closest = LLONG_MAX; while (left >= 1) { bool occupied = false; for (auto &[l, r] : intervals) { if (left >= l && left <= r) { occupied = true; left = l - 1; break; } } if (!occupied) { closest = left; break; } } while (right <= n) { bool occupied = false; for (auto &[l, r] : intervals) { if (right >= l && right <= r) { occupied = true; right = r + 1; break; } } if (!occupied) { if (closest == LLONG_MAX || std::abs(s - right) < std::abs(s - closest)) { closest = right; } break; } } std::cout << closest << std::endl; return 0; } |
English