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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//Karol Dziekan
#include <bits/stdc++.h>

using namespace std;

#define endl '\n'
#define LL long long int

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

    long long int ilosc_domy;
    long long int ilosc_przedzialy;
    long long int szkola;

    cin >> ilosc_domy >> ilosc_przedzialy >> szkola;

    vector<pair<long long int,long long int>> przedzialy;

    for (long long int i = 0; i < ilosc_przedzialy; i++){
        long long int a,b;
        cin >> a >> b;

        przedzialy.push_back({a,b});
    }

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

    //Znalezienie przedzialu w ktorym znajduje sie szkola
    long long int przedzial_szkoly;
    for(long long int i = 0; i < ilosc_przedzialy; i++){
        long long int poczatek = przedzialy[i].first;
        long long int koniec = przedzialy[i].second;

        if (poczatek <= szkola && szkola <= koniec){
            przedzial_szkoly = i;
            break;
        }
    }

    //Sprawdzenie na lewo
    long long int budynek_lewo,odleglosc_lewo = 1e18;
    for (long long int i = przedzial_szkoly; i >= 0; i--){
        if (i == 0){
            if (przedzialy[i].first - 1 >= 1){
                budynek_lewo = przedzialy[i].first - 1;
                odleglosc_lewo = szkola - budynek_lewo;
                break;
            }
        }else{
            if (przedzialy[i].first - 1 != przedzialy[i-1].second){
                budynek_lewo = przedzialy[i].first - 1;
                odleglosc_lewo = szkola - budynek_lewo;
                break;
            }
        }
    }

    //Sprawdzenie na prawo
    long long int budynek_prawo,odleglosc_prawo = 1e18;
    for (long long int i = przedzial_szkoly; i < ilosc_przedzialy; i++){
        if (i == ilosc_przedzialy - 1){
            if (przedzialy[i].second + 1 <= ilosc_domy){
                budynek_prawo = przedzialy[i].second + 1;
                odleglosc_prawo = budynek_prawo - szkola;
                break;
            }
        }else{
            if (przedzialy[i].second + 1 != przedzialy[i+1].first){
                budynek_prawo = przedzialy[i].second + 1;
                odleglosc_prawo = budynek_prawo - szkola;
                break;
            }
        }
    }

    //Wypisanie blizszego budynku z priorytetem na lewo
    if (odleglosc_lewo <= odleglosc_prawo){
        cout << budynek_lewo;
    }else{
        cout << budynek_prawo;
    }
    
    return 0;
}