#include <algorithm> #include <cstdio> #include <tuple> #include <vector> using namespace std; using range = pair<unsigned long long, unsigned long long>; int main() { unsigned long long n, m, s; vector<range> house_ranges; scanf("%llu %llu %llu", &n, &m, &s); for (int i = 0; i < m; i++) { range house_range; scanf("%llu %llu", &house_range.first, &house_range.second); house_ranges.push_back(house_range); } sort(house_ranges.begin(), house_ranges.end()); vector<range> merged_ranges; range current_range = house_ranges[0]; for (int i = 1; i < house_ranges.size(); i++) { if (current_range.second >= house_ranges[i].first - 1) { current_range.second = max(current_range.second, house_ranges[i].second); } else { merged_ranges.push_back(current_range); current_range = house_ranges[i]; } } merged_ranges.push_back(current_range); for (int i = 0; i < merged_ranges.size(); i++) { // printf("%d %d\n", merged_ranges[i].first, merged_ranges[i].second); if (merged_ranges[i].first <= s && merged_ranges[i].second >= s) { unsigned long long left = s - merged_ranges[i].first; unsigned long long right = merged_ranges[i].second - s; if (merged_ranges[i].first - 1 <= 0) { printf("%llu", merged_ranges[i].second + 1); break; } if (merged_ranges[i].second + 1 > n) { printf("%llu", merged_ranges[i].first - 1); break; } if (left <= right) { printf("%llu", merged_ranges[i].first - 1); break; } else { printf("%llu", merged_ranges[i].second + 1); break; } } } 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 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <algorithm> #include <cstdio> #include <tuple> #include <vector> using namespace std; using range = pair<unsigned long long, unsigned long long>; int main() { unsigned long long n, m, s; vector<range> house_ranges; scanf("%llu %llu %llu", &n, &m, &s); for (int i = 0; i < m; i++) { range house_range; scanf("%llu %llu", &house_range.first, &house_range.second); house_ranges.push_back(house_range); } sort(house_ranges.begin(), house_ranges.end()); vector<range> merged_ranges; range current_range = house_ranges[0]; for (int i = 1; i < house_ranges.size(); i++) { if (current_range.second >= house_ranges[i].first - 1) { current_range.second = max(current_range.second, house_ranges[i].second); } else { merged_ranges.push_back(current_range); current_range = house_ranges[i]; } } merged_ranges.push_back(current_range); for (int i = 0; i < merged_ranges.size(); i++) { // printf("%d %d\n", merged_ranges[i].first, merged_ranges[i].second); if (merged_ranges[i].first <= s && merged_ranges[i].second >= s) { unsigned long long left = s - merged_ranges[i].first; unsigned long long right = merged_ranges[i].second - s; if (merged_ranges[i].first - 1 <= 0) { printf("%llu", merged_ranges[i].second + 1); break; } if (merged_ranges[i].second + 1 > n) { printf("%llu", merged_ranges[i].first - 1); break; } if (left <= right) { printf("%llu", merged_ranges[i].first - 1); break; } else { printf("%llu", merged_ranges[i].second + 1); break; } } } return 0; } |