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

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

    std::vector<std::pair<long long int,long long int>> blocks, emptyBlocks;

    for (int i=0; i<m; ++i) {
        long long int l, r;
        scanf("%lld %lld", &l, &r);
        blocks.push_back({l, r});
    }
    std::sort(blocks.begin(), blocks.end());

    for (int i=0; i<m; ++i) {
        long long int l, r;
        if (i == 0) {
            l = 1;
            r = blocks[i].first - 1;
        } else {
            l = blocks[i-1].second + 1;
            r = blocks[i].first - 1;
        }
        if (l <= r) {
            emptyBlocks.push_back({l, r});
        }
    }

    if (blocks.back().second +1 < n)
        emptyBlocks.push_back({blocks.back().second + 1, n});

    long long int minDist = LLONG_MAX, minDistIndex = 0;
    for (const auto& [l, r] : emptyBlocks) {
        if (l > s) {
            long long int dist = l - s;
            if (dist < minDist) {
                minDist = dist;
                minDistIndex = l;
            }
        } else if (r < s) {
            long long int dist = s - r;
            if (dist < minDist) {
                minDist = dist;
                minDistIndex = r;
            }
        }
    }

    printf("%lld", minDistIndex);
    return 0;
}