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

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
	long long  n, m, s;
	cin >> n >> m >> s;
    vector<pair<long long, long long>> przedzialy;
	long long l, r;
	for (int i = 0; i < m; i++)
	{
	    cin >> l >> r;
	    przedzialy.push_back({l, r});
	}
	sort(przedzialy.begin(), przedzialy.end());
	long long szukany_przedzial = -1;
	for (long long  i = 0; i < m; i++)
	{
	    auto [pierwsza, druga] = przedzialy[i];
	       if (s >= pierwsza && s <= druga) {
	           szukany_przedzial = i;
	           break;
	       }
    }
    //cout << szukany_przedzial << endl;
    long long wynik_w_prawo = LLONG_MAX, wynik_w_lewo = LLONG_MAX;
    if (szukany_przedzial == 0 && przedzialy[szukany_przedzial].first - 1 >= 1) {
        wynik_w_lewo = przedzialy[szukany_przedzial].first - 1;
    }
    else {
        for (int i = szukany_przedzial; i >= 1; i--) // ruch w lewo
        {   
            if (przedzialy[i].first - przedzialy[i - 1].second > 1) {
                wynik_w_lewo = przedzialy[i].first - 1;
                //cout << wynik_w_lewo;
                break;
            }
        }
    }
    if (wynik_w_lewo == LLONG_MAX && przedzialy[0].first > 1) {
        wynik_w_lewo = przedzialy[0].first - 1;
    }
    for (int i = szukany_przedzial; i < m - 1; i++) // ruch w prawo
    {
        if (przedzialy[i + 1].first - przedzialy[i].second > 1) {
            wynik_w_prawo = przedzialy[i].second + 1;
            //cout << wynik_w_prawo;
            break;
        }
    }
        if (szukany_przedzial == m - 1 && przedzialy[szukany_przedzial].second < n) {
        wynik_w_prawo = przedzialy[szukany_przedzial].second + 1;
    }
    if (szukany_przedzial != m - 1 && wynik_w_prawo == LLONG_MAX && przedzialy[m - 1].second  < n) {
        wynik_w_prawo = przedzialy[m - 1].second + 1;
    }
    //cout << wynik_w_prawo << " " << wynik_w_lewo;
    long long dist_lewo = abs(s - wynik_w_lewo);
    long long dist_prawo = abs(s - wynik_w_prawo);
   // cout << endl << dist_lewo << " " << dist_prawo;
    if (dist_lewo < dist_prawo) 
        cout << wynik_w_lewo;
    else if (dist_prawo < dist_lewo)
        cout << wynik_w_prawo;
    else
        cout << min(wynik_w_prawo, wynik_w_lewo);
}