#include <bits/stdc++.h> #define rep(a,b,c) for(auto a = (b); a != (c); a++) #define repD(a,b,c) for(auto a = (b); a != (c); a--) #define repIn(a, b) for(auto& a : (b)) #define repIn2(a, b, c) for(auto& [a, b] : (c)) constexpr bool dbg = 1; #define DEBUG if constexpr(dbg) #define DC DEBUG std::cerr #define eol std::endl #define ll long long #define pb push_back using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); ll n, m, s; cin >> n >> m >> s; vector<pair<ll, ll>> intervals(m); rep(i, 0ll, m) cin >> intervals[i].first >> intervals[i].second; ranges::sort(intervals); auto xd = ranges::upper_bound(intervals, pair{s, (ll)3e18}) - intervals.begin() - 1; //assert(intervals[xd].first <= s && s <= intervals[xd].second); ll rightOne = xd; while(rightOne < m - 1 && intervals[rightOne].second + 1 == intervals[rightOne + 1].first) rightOne++; ll leftOne = xd; while(leftOne > 0 && intervals[leftOne - 1].second + 1 == intervals[leftOne].first) leftOne--; cout << ((intervals[rightOne].second == n || (intervals[leftOne].first > 1 && s - intervals[leftOne].first + 1 <= intervals[rightOne].second + 1 - s)) ? intervals[leftOne].first - 1 : intervals[rightOne].second + 1) << '\n'; }
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 | #include <bits/stdc++.h> #define rep(a,b,c) for(auto a = (b); a != (c); a++) #define repD(a,b,c) for(auto a = (b); a != (c); a--) #define repIn(a, b) for(auto& a : (b)) #define repIn2(a, b, c) for(auto& [a, b] : (c)) constexpr bool dbg = 1; #define DEBUG if constexpr(dbg) #define DC DEBUG std::cerr #define eol std::endl #define ll long long #define pb push_back using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); ll n, m, s; cin >> n >> m >> s; vector<pair<ll, ll>> intervals(m); rep(i, 0ll, m) cin >> intervals[i].first >> intervals[i].second; ranges::sort(intervals); auto xd = ranges::upper_bound(intervals, pair{s, (ll)3e18}) - intervals.begin() - 1; //assert(intervals[xd].first <= s && s <= intervals[xd].second); ll rightOne = xd; while(rightOne < m - 1 && intervals[rightOne].second + 1 == intervals[rightOne + 1].first) rightOne++; ll leftOne = xd; while(leftOne > 0 && intervals[leftOne - 1].second + 1 == intervals[leftOne].first) leftOne--; cout << ((intervals[rightOne].second == n || (intervals[leftOne].first > 1 && s - intervals[leftOne].first + 1 <= intervals[rightOne].second + 1 - s)) ? intervals[leftOne].first - 1 : intervals[rightOne].second + 1) << '\n'; } |