#include <bits/stdc++.h> long long n, s, r; int m; struct interval { long long a; long long b; inline bool operator<(interval &i) {return a<i.a;} }; std::vector<interval> v, nv; int main() { scanf("%lld%d%lld", &n, &m, &s); for (int i=0; i<m; ++i) { long long a, b; scanf("%lld%lld", &a, &b); v.push_back({a, b}); } std::sort(v.begin(), v.end()); // for (int i=0; i^v.size(); ++i) {printf("DEBUG: v[%d]={%lld, %lld}\n", i, v[i].a, v[i].b);} long long a=v[0].a, b=v[0].b; for (interval* it=&v[1]; it<=&v[v.size()-1]; ++it) { if (b+1==it->a) { b = it->b; } else { nv.push_back({a, b}); a = it->a; b = it->b; } } nv.push_back({a, b}); // printf("DEBUG: nv.size()=%d\n", (int)nv.size()); for (auto it=nv.begin(); it!=nv.end(); ++it) { // printf("DEBUG: nv {%lld, %lld}\n", it->a, it->b); if ((it->a<=s)&&(it->b>=s)) { a = (it->a==1)?LLONG_MAX:it->a; b = (it->b==n)?LLONG_MAX:it->b; if (std::abs(s-b)>=std::abs(s-a)) { r = a-1; } else { r = b+1; } break; } } printf("%lld\n", r); 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 | #include <bits/stdc++.h> long long n, s, r; int m; struct interval { long long a; long long b; inline bool operator<(interval &i) {return a<i.a;} }; std::vector<interval> v, nv; int main() { scanf("%lld%d%lld", &n, &m, &s); for (int i=0; i<m; ++i) { long long a, b; scanf("%lld%lld", &a, &b); v.push_back({a, b}); } std::sort(v.begin(), v.end()); // for (int i=0; i^v.size(); ++i) {printf("DEBUG: v[%d]={%lld, %lld}\n", i, v[i].a, v[i].b);} long long a=v[0].a, b=v[0].b; for (interval* it=&v[1]; it<=&v[v.size()-1]; ++it) { if (b+1==it->a) { b = it->b; } else { nv.push_back({a, b}); a = it->a; b = it->b; } } nv.push_back({a, b}); // printf("DEBUG: nv.size()=%d\n", (int)nv.size()); for (auto it=nv.begin(); it!=nv.end(); ++it) { // printf("DEBUG: nv {%lld, %lld}\n", it->a, it->b); if ((it->a<=s)&&(it->b>=s)) { a = (it->a==1)?LLONG_MAX:it->a; b = (it->b==n)?LLONG_MAX:it->b; if (std::abs(s-b)>=std::abs(s-a)) { r = a-1; } else { r = b+1; } break; } } printf("%lld\n", r); return 0; } |