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

using namespace std;

int main() {
    long long n, m, s;
    cin >> n >> m >> s;

    vector<pair<long long, long long>> occupied(m);

    for (long long i = 0; i < m; i++) {
        cin >> occupied[i].first >> occupied[i].second;
    }

    sort(occupied.begin(), occupied.end());

    long long left_candidate = s - 1;
    long long right_candidate = s + 1;

    // Szukamy najbliższego wolnego budynku, idąc od szkoły
    while (true) {
        bool found_left = true, found_right = true;

        // Sprawdzanie, czy left_candidate jest zajęty
        for (auto &range : occupied) {
            if (left_candidate >= range.first && left_candidate <= range.second) {
                found_left = false;
                break;
            }
        }

        // Sprawdzanie, czy right_candidate jest zajęty
        for (auto &range : occupied) {
            if (right_candidate >= range.first && right_candidate <= range.second) {
                found_right = false;
                break;
            }
        }

        // Jeśli znaleziono wolny budynek po lewej, wybieramy go
        if (found_left && left_candidate >= 1) {
            cout << left_candidate << endl;
            return 0;
        }

        // Jeśli znaleziono wolny budynek po prawej, wybieramy go
        if (found_right && right_candidate <= n) {
            cout << right_candidate << endl;
            return 0;
        }

        // Przechodzimy dalej
        left_candidate--;
        right_candidate++;
    }

    return 0;
}