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
#include <stdio.h>

int main() {
    long long n, s;
    int m;
    scanf("%lld %d %lld", &n, &m, &s);

    long long li[1000], ri[1000]; 
    for (int i = 0; i < m; i++) {
        scanf("%lld %lld", &li[i], &ri[i]);
    }

    long long lmax = 0, rmin = n + 1;
    for (int i = 0; i < m; i++) {
        if (li[i] <= s && li[i] > lmax) lmax = li[i];
        if (ri[i] >= s && ri[i] < rmin) rmin = ri[i];
    }

    
    long long left = lmax - 1;
    while (left >= 1) {
        int occupied = 0;
        for (int i = 0; i < m; i++) {
            if (li[i] <= left && left <= ri[i]) {
                occupied = 1;
                break;
            }
        }
        if (!occupied) break;
        left--;
    }

    
    long long right = rmin + 1;
    while (right <= n) {
        int occupied = 0;
        for (int i = 0; i < m; i++) {
            if (li[i] <= right && right <= ri[i]) {
                occupied = 1;
                break;
            }
        }
        if (!occupied) break;
        right++;
    }

    long long dist_left = (left >= 1) ? (s - left) : n + 1;
    long long dist_right = (right <= n) ? (right - s) : n + 1;

    if (dist_left < dist_right) {
        printf("%lld\n", left);
    } else if (dist_right < dist_left) {
        printf("%lld\n", right);
    } else {
        if (left >= 1 && right <= n) {
            printf("%lld\n", (left < right) ? left : right);
        } else if (left >= 1) {
            printf("%lld\n", left);
        } else {
            printf("%lld\n", right);
        }
    }

    return 0;
}