#include <iostream> #include <vector> #include <algorithm> using namespace std; typedef pair<long long,long long> przedzial; int main() { long long n, m, s; cin >> n >> m >> s; vector<przedzial> p; for(int i = 0; i < m; i++) { long long l, r; cin >> l >> r; p.push_back( przedzial(l,r) ); } p.push_back(przedzial(n+1,n+2)); p.push_back(przedzial(-1,0)); sort(p.begin(), p.end()); int przedzial_s; for(przedzial_s = 0; p[przedzial_s].first > s || p[przedzial_s].second < s; przedzial_s++); long long right_neighbor = -1, left_neighbor = -1; for(int i = przedzial_s; i < p.size()-1; i++) { if( p[i].second < p[i+1].first-1 ) { right_neighbor = p[i].second+1; break; } } for(int i = przedzial_s; i > 0; i--) { if( p[i].first > p[i-1].second+1 ) { left_neighbor = p[i].first-1; break; } } if(left_neighbor < 0) { cout << right_neighbor << endl; return 0; } if(right_neighbor < 0) { cout << left_neighbor << endl; return 0; } if(s-left_neighbor <= right_neighbor-s) cout << left_neighbor << endl; else cout << right_neighbor << 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 | #include <iostream> #include <vector> #include <algorithm> using namespace std; typedef pair<long long,long long> przedzial; int main() { long long n, m, s; cin >> n >> m >> s; vector<przedzial> p; for(int i = 0; i < m; i++) { long long l, r; cin >> l >> r; p.push_back( przedzial(l,r) ); } p.push_back(przedzial(n+1,n+2)); p.push_back(przedzial(-1,0)); sort(p.begin(), p.end()); int przedzial_s; for(przedzial_s = 0; p[przedzial_s].first > s || p[przedzial_s].second < s; przedzial_s++); long long right_neighbor = -1, left_neighbor = -1; for(int i = przedzial_s; i < p.size()-1; i++) { if( p[i].second < p[i+1].first-1 ) { right_neighbor = p[i].second+1; break; } } for(int i = przedzial_s; i > 0; i--) { if( p[i].first > p[i-1].second+1 ) { left_neighbor = p[i].first-1; break; } } if(left_neighbor < 0) { cout << right_neighbor << endl; return 0; } if(right_neighbor < 0) { cout << left_neighbor << endl; return 0; } if(s-left_neighbor <= right_neighbor-s) cout << left_neighbor << endl; else cout << right_neighbor << endl; return 0; } |