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
#include <bits/stdc++.h>

using std::cin, std::cout;
using i32 = int;
using u32 = unsigned int;
using i64 = long long;
using u64 = unsigned long long;
const char endl = '\n';

struct seg {
    i64 l, r;
    auto operator <=> (const seg &other) const = default;
};

int main() {
    std::ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    i64 n;
    int m;
    i64 s;
    cin >> n >> m >> s;

    std::vector<seg> segs(m);
    for (int i = 0; i < m; i++) {
        cin >> segs[i].l >> segs[i].r;
    }

    segs.emplace_back(n + 1, n + 1);

    std::ranges::sort(segs);

    i64 best_l = -1;
    i64 best_r = INT64_MAX;

    i64 prev_r = 0;
    for (int i = 0; i < segs.size(); i++) {
        auto [l, r] = segs[i];

        if (prev_r == l - 1) {
            prev_r = r;
            continue;
        }

        if (l <= s) {
            if (l - 1 > best_l) best_l = l - 1;
        } else {
            if (prev_r + 1 < best_r) best_r = prev_r + 1;
        }

        prev_r = r;
    }

    if (best_l == -1) cout << best_r;
    else if (best_r == INT64_MAX) cout << best_l;
    else {
        if (s - best_l <= best_r - s) {
            cout << best_l;
        } else {
            cout << best_r;
        }
    }

    return 0;
}