#include <cstdio> #include <unordered_map> #define ulli unsigned long long int #define FOR(i,a,b) for(int i=(int)(a); i<(int)(b); ++i) using namespace std; int m; ulli n, s, L0, R0; int main() { scanf("%llu %d %llu", &n, &m, &s); unordered_map<ulli, ulli> next; FOR(i,0,m) { ulli L, R; scanf("%llu %llu", &L, &R); if (s > R) next[R] = L-1; else if (s < L) next[L] = R+1; else { L0 = L; R0 = R; } } ulli resL = L0-1, resR = R0+1; while (next.find(resL) != next.end()) resL = next[resL]; while (next.find(resR) != next.end()) resR = next[resR]; ulli result; if (resL == 0) result = resR; else if (resR == n+1) result = resL; else if (s - resL <= resR - s) result = resL; else result = resR; printf("%llu\n", result); }
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 <cstdio> #include <unordered_map> #define ulli unsigned long long int #define FOR(i,a,b) for(int i=(int)(a); i<(int)(b); ++i) using namespace std; int m; ulli n, s, L0, R0; int main() { scanf("%llu %d %llu", &n, &m, &s); unordered_map<ulli, ulli> next; FOR(i,0,m) { ulli L, R; scanf("%llu %llu", &L, &R); if (s > R) next[R] = L-1; else if (s < L) next[L] = R+1; else { L0 = L; R0 = R; } } ulli resL = L0-1, resR = R0+1; while (next.find(resL) != next.end()) resL = next[resL]; while (next.find(resR) != next.end()) resR = next[resR]; ulli result; if (resL == 0) result = resR; else if (resR == n+1) result = resL; else if (s - resL <= resR - s) result = resL; else result = resR; printf("%llu\n", result); } |