#include<bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define st first #define nd second #define eb emplace_back typedef long long LL; #define itf(e, v) for(auto& e : (v)) #define rep(i, n) for(LL i = 0; i < (n);i++) int main(){ cin.tie(0)->sync_with_stdio(0), cout.tie(0); LL n, m, s; cin >> n >> m >> s; vector<pair<LL, LL>> intervals; rep(i, m){ LL l, r; cin >> l >> r; if(l <= s && s <= r){ //cout << l << ' ' << r << endl; if(l <= s-1) intervals.eb(l, s-1); if(s+1 <= r) intervals.eb(s+1, r); }else intervals.eb(l, r); } m = intervals.size(); //cout << m << endl; // for(auto [a, b] : intervals) // cout << a << ' ' << b << endl; sort(all(intervals)); LL mid = LL(lower_bound(all(intervals), make_pair(s, 0LL)) - intervals.begin()); LL ptr_right = s+1, ptr_left = s-1; for(LL i = mid; i < m; i++){ if(intervals[i].st == ptr_right) ptr_right = intervals[i].nd + 1; else break; } for(LL i = mid-1; i >= 0; i--){ if(intervals[i].nd == ptr_left) ptr_left = intervals[i].st - 1; else break; } if(ptr_right == n+1){ cout << ptr_left << endl; return 0; } else if(ptr_left == 0){ cout << ptr_right << endl; return 0; } cout << ((s - ptr_left <= ptr_right - s) ? ptr_left : ptr_right) << endl; }
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 | #include<bits/stdc++.h> using namespace std; #define all(x) x.begin(), x.end() #define st first #define nd second #define eb emplace_back typedef long long LL; #define itf(e, v) for(auto& e : (v)) #define rep(i, n) for(LL i = 0; i < (n);i++) int main(){ cin.tie(0)->sync_with_stdio(0), cout.tie(0); LL n, m, s; cin >> n >> m >> s; vector<pair<LL, LL>> intervals; rep(i, m){ LL l, r; cin >> l >> r; if(l <= s && s <= r){ //cout << l << ' ' << r << endl; if(l <= s-1) intervals.eb(l, s-1); if(s+1 <= r) intervals.eb(s+1, r); }else intervals.eb(l, r); } m = intervals.size(); //cout << m << endl; // for(auto [a, b] : intervals) // cout << a << ' ' << b << endl; sort(all(intervals)); LL mid = LL(lower_bound(all(intervals), make_pair(s, 0LL)) - intervals.begin()); LL ptr_right = s+1, ptr_left = s-1; for(LL i = mid; i < m; i++){ if(intervals[i].st == ptr_right) ptr_right = intervals[i].nd + 1; else break; } for(LL i = mid-1; i >= 0; i--){ if(intervals[i].nd == ptr_left) ptr_left = intervals[i].st - 1; else break; } if(ptr_right == n+1){ cout << ptr_left << endl; return 0; } else if(ptr_left == 0){ cout << ptr_right << endl; return 0; } cout << ((s - ptr_left <= ptr_right - s) ? ptr_left : ptr_right) << endl; } |