#include <bits/stdc++.h> #define INF (long long int)(1e15) using namespace std; struct seg { long long int from; long long int to; void set(long long int a, long long int b) { from = a; to = b; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); long long int n, m, s; //houses, segments, school cin >> n >> m >> s; vector<seg> segments(m+2); segments[0].set(-INF, 0); segments[m+1].set(n+1, INF); for(int i=1; i<=m; i++) { long long int a, b; cin >> a >> b; segments[i].set(a, b); } sort(segments.begin(), segments.end(), [](seg &a, seg &b) {return a.to < b.to;}); int school; //segment that contains the school for(int i=0; i<m+2; i++) { //brute if(segments[i].from <= s && s <= segments[i].to) { school = i; break; } } int left = school; while(left > 0 && segments[left].from == segments[left-1].to+1) { left--; } int right = school; while(right < m+1 && segments[right].to == segments[right+1].from-1) { right++; } long long int a = segments[left].from-1; // a<b long long int b = segments[right].to+1; if(s-a > b-s) { cout << b; } else { cout << a; } 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 | #include <bits/stdc++.h> #define INF (long long int)(1e15) using namespace std; struct seg { long long int from; long long int to; void set(long long int a, long long int b) { from = a; to = b; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); long long int n, m, s; //houses, segments, school cin >> n >> m >> s; vector<seg> segments(m+2); segments[0].set(-INF, 0); segments[m+1].set(n+1, INF); for(int i=1; i<=m; i++) { long long int a, b; cin >> a >> b; segments[i].set(a, b); } sort(segments.begin(), segments.end(), [](seg &a, seg &b) {return a.to < b.to;}); int school; //segment that contains the school for(int i=0; i<m+2; i++) { //brute if(segments[i].from <= s && s <= segments[i].to) { school = i; break; } } int left = school; while(left > 0 && segments[left].from == segments[left-1].to+1) { left--; } int right = school; while(right < m+1 && segments[right].to == segments[right+1].from-1) { right++; } long long int a = segments[left].from-1; // a<b long long int b = segments[right].to+1; if(s-a > b-s) { cout << b; } else { cout << a; } return 0; } |