#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
int n, m, s;
std::cin >> n >> m >> s;
std::vector<std::pair<int, int>> ranges;
ranges.assign(m + 2, {});
for (int i = 1; i <= m; i++) {
std::cin >> ranges[i].first >> ranges[i].second;
}
ranges[0] = {0, 0};
ranges[m + 1] = {n + 1, n + 1};
std::sort(ranges.begin(), ranges.end(), [](std::pair<int, int> a, std::pair<int, int> b) {
return a.first < b.first;
});
int min = -1;
int school_range = -1;
for (int i = 1; i <= m; i++) {
if(ranges[i].first <= s && ranges[i].second >= s){
school_range = i;
break;
}
}
int i = school_range;
while(i > 1 && ranges[i - 1].second== ranges[i].first - 1){
i--;
}
if(ranges[i].first - 1 > 0 && ranges[i].first - 1 <= n){
min = ranges[i].first - 1;
}
i = school_range;
while(i < m && ranges[i + 1].first == ranges[i].second + 1){
i++;
}
if(ranges[i].second + 1 > 0 && ranges[i].second + 1 <= n && (min == -1 || abs(min - s) > abs(ranges[i].second + 1 - s))){
min = ranges[i].second + 1;
}
std::cout << min;
}
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 | #include <iostream> #include <vector> #include <utility> #include <algorithm> int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n, m, s; std::cin >> n >> m >> s; std::vector<std::pair<int, int>> ranges; ranges.assign(m + 2, {}); for (int i = 1; i <= m; i++) { std::cin >> ranges[i].first >> ranges[i].second; } ranges[0] = {0, 0}; ranges[m + 1] = {n + 1, n + 1}; std::sort(ranges.begin(), ranges.end(), [](std::pair<int, int> a, std::pair<int, int> b) { return a.first < b.first; }); int min = -1; int school_range = -1; for (int i = 1; i <= m; i++) { if(ranges[i].first <= s && ranges[i].second >= s){ school_range = i; break; } } int i = school_range; while(i > 1 && ranges[i - 1].second== ranges[i].first - 1){ i--; } if(ranges[i].first - 1 > 0 && ranges[i].first - 1 <= n){ min = ranges[i].first - 1; } i = school_range; while(i < m && ranges[i + 1].first == ranges[i].second + 1){ i++; } if(ranges[i].second + 1 > 0 && ranges[i].second + 1 <= n && (min == -1 || abs(min - s) > abs(ranges[i].second + 1 - s))){ min = ranges[i].second + 1; } std::cout << min; } |
English