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
#include "iostream"
#include "algorithm"
#include "vector"
#include "utility"

int main() {
    long long n, s;
    int m;
    std::cin >> n >> m >> s;
    std::vector<std::pair<long long, long long>> segments;
    for (int i = 0; i < m; i++) {
        long long l, r;
        std::cin >> l >> r;
        segments.emplace_back(l, r);
    }
    std::sort(segments.begin(), segments.end());

    std::vector<std::pair<long long, long long>> merged_segments = {segments[0]};
    for (int i = 1; i < segments.size(); i++) {
        if (merged_segments[merged_segments.size() - 1].second + 1 == segments[i].first) {
            merged_segments[merged_segments.size() - 1].second = segments[i].second;
        } else {
            merged_segments.push_back(segments[i]);
        }
    }

    for (auto seg: merged_segments) {
        if (s >= seg.first && s <= seg.second) {
            if (s - seg.first <= seg.second - s && seg.first - 1 >= 1) {
                std::cout << seg.first - 1 << std::endl;
            } else if (seg.second + 1 <= n) {
                std::cout << seg.second + 1 << std::endl;
            } else {
                std::cout << seg.first - 1 << std::endl;
            }
            return 0;
        }
    }
}