#include <iostream> #include <vector> #include <utility> #include <algorithm> using namespace std; void input(long long & n, long long & m, long long & s, vector<pair<long long, long long>> & intervals) { cin >> n >> m >> s; intervals.resize(m+2); for(int i = 0; i < m; i++) { cin >> intervals[i].first >> intervals[i].second; } intervals[m] = {0, 0}; intervals[m+1] = {n+1, n+1}; sort(intervals.begin(), intervals.end()); } void solve() { long long n, m, s; vector<pair<long long, long long>> intervals; input(n, m, s, intervals); long long sinv = -1; for(int i = 0; i < intervals.size(); i++) { if(intervals[i].first <= s && intervals[i].second >= s) { sinv = i; break; } } long long left = 0; for(int i = sinv; i > 0; i--) { if(intervals[i].first - 1 > intervals[i-1].second) { left = intervals[i].first - 1; break; } } long long right = 0; for(int i = sinv; i < intervals.size() - 1; i++) { if(intervals[i].second + 1 < intervals[i+1].first) { right = intervals[i].second + 1; break; } } long long result = 0; if (left == 0) { result = right; } else if (right == 0) { result = left; } else if ((right - s) < (s - left)) { result = right; } else { result = left; } cout << result << "\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); solve(); 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 | #include <iostream> #include <vector> #include <utility> #include <algorithm> using namespace std; void input(long long & n, long long & m, long long & s, vector<pair<long long, long long>> & intervals) { cin >> n >> m >> s; intervals.resize(m+2); for(int i = 0; i < m; i++) { cin >> intervals[i].first >> intervals[i].second; } intervals[m] = {0, 0}; intervals[m+1] = {n+1, n+1}; sort(intervals.begin(), intervals.end()); } void solve() { long long n, m, s; vector<pair<long long, long long>> intervals; input(n, m, s, intervals); long long sinv = -1; for(int i = 0; i < intervals.size(); i++) { if(intervals[i].first <= s && intervals[i].second >= s) { sinv = i; break; } } long long left = 0; for(int i = sinv; i > 0; i--) { if(intervals[i].first - 1 > intervals[i-1].second) { left = intervals[i].first - 1; break; } } long long right = 0; for(int i = sinv; i < intervals.size() - 1; i++) { if(intervals[i].second + 1 < intervals[i+1].first) { right = intervals[i].second + 1; break; } } long long result = 0; if (left == 0) { result = right; } else if (right == 0) { result = left; } else if ((right - s) < (s - left)) { result = right; } else { result = left; } cout << result << "\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); solve(); return 0; } |