#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define imie(x...) cerr << "[" #x "]: ", [](auto... $) {((cerr << $ << "; "), ...); }(x), cerr << '\n' using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; const int mod=1e9+7; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n, m, s; cin >> n >> m >> s; vector<pair<ll, ll>> v(m); for(auto &[l, r] : v) { cin >> l >> r; } sort(v.begin(), v.end()); vector<pair<ll, ll>> razem; for(auto &[l, r] : v) { if(razem.empty() || l > razem.back().second + 1) { razem.push_back({l, r}); } else { razem.back().second = max(razem.back().second, r); } } pair<ll, ll> b; for(auto &[l, r] : razem) { if(l <= s && s <= r) { b = {l, r}; break; } } ll ans = -1, maxi = LLONG_MAX; if(b.first > 1) { ll kand = b.first - 1; ll d = abs(s - kand); if(d < maxi) { maxi = d; ans = kand; } } if(b.second < n) { ll kand = b.second + 1; ll d = abs(s - kand); if(d < maxi || (d == maxi && kand < ans)) { maxi = d; ans = kand; } } cout << ans; 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 | #include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #define imie(x...) cerr << "[" #x "]: ", [](auto... $) {((cerr << $ << "; "), ...); }(x), cerr << '\n' using namespace std; using namespace __gnu_pbds; typedef long long ll; typedef long double ld; const int mod=1e9+7; typedef tree<int,null_type,less<int>,rb_tree_tag,tree_order_statistics_node_update> ordered_set; int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll n, m, s; cin >> n >> m >> s; vector<pair<ll, ll>> v(m); for(auto &[l, r] : v) { cin >> l >> r; } sort(v.begin(), v.end()); vector<pair<ll, ll>> razem; for(auto &[l, r] : v) { if(razem.empty() || l > razem.back().second + 1) { razem.push_back({l, r}); } else { razem.back().second = max(razem.back().second, r); } } pair<ll, ll> b; for(auto &[l, r] : razem) { if(l <= s && s <= r) { b = {l, r}; break; } } ll ans = -1, maxi = LLONG_MAX; if(b.first > 1) { ll kand = b.first - 1; ll d = abs(s - kand); if(d < maxi) { maxi = d; ans = kand; } } if(b.second < n) { ll kand = b.second + 1; ll d = abs(s - kand); if(d < maxi || (d == maxi && kand < ans)) { maxi = d; ans = kand; } } cout << ans; return 0; } |