#include <algorithm> #include <iostream> #include <tuple> #include <utility> #include <vector> using ll = long long; int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(0); ll n; int m; ll s; std::cin >> n >> m >> s; ll INFTY = 10 * n; // 2*n is enough i think but who cares std::vector<std::pair<ll, ll>> segs(m); for (int i = 0; i < m; ++i) { ll l, r; std::cin >> l >> r; segs[i] = {l, r}; } std::sort(segs.begin(), segs.end()); for (int i = 0; i < m; ++i) { auto [l, r] = segs[i]; if (s < l || r < s) continue; int j = i; while (j > 0 && segs[j-1].second == segs[j].first - 1) { --j; } ll candidate_left = -INFTY; if (segs[j].first > 1) { candidate_left = segs[j].first - 1; } j = i; while (j < m-1 && segs[j+1].first == segs[j].second + 1) { ++j; } ll candidate_rite = +INFTY; if (segs[j].second < n) { candidate_rite = segs[j].second + 1; } // std::cout << "candidate_left="<<candidate_left<<", candidate_rite="<<candidate_rite<<'\n'; if (s - candidate_left <= candidate_rite - s) { std::cout << candidate_left << '\n'; } else { std::cout << candidate_rite << '\n'; } return 0; } // the statement says the school always lies in a segment. __builtin_unreachable(); }
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 65 66 67 | #include <algorithm> #include <iostream> #include <tuple> #include <utility> #include <vector> using ll = long long; int main() { std::ios_base::sync_with_stdio(0); std::cin.tie(0); ll n; int m; ll s; std::cin >> n >> m >> s; ll INFTY = 10 * n; // 2*n is enough i think but who cares std::vector<std::pair<ll, ll>> segs(m); for (int i = 0; i < m; ++i) { ll l, r; std::cin >> l >> r; segs[i] = {l, r}; } std::sort(segs.begin(), segs.end()); for (int i = 0; i < m; ++i) { auto [l, r] = segs[i]; if (s < l || r < s) continue; int j = i; while (j > 0 && segs[j-1].second == segs[j].first - 1) { --j; } ll candidate_left = -INFTY; if (segs[j].first > 1) { candidate_left = segs[j].first - 1; } j = i; while (j < m-1 && segs[j+1].first == segs[j].second + 1) { ++j; } ll candidate_rite = +INFTY; if (segs[j].second < n) { candidate_rite = segs[j].second + 1; } // std::cout << "candidate_left="<<candidate_left<<", candidate_rite="<<candidate_rite<<'\n'; if (s - candidate_left <= candidate_rite - s) { std::cout << candidate_left << '\n'; } else { std::cout << candidate_rite << '\n'; } return 0; } // the statement says the school always lies in a segment. __builtin_unreachable(); } |