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

using namespace std;

bool compare(vector<long long> &a, vector<long long> &b) {
    return a[0] < b[0]; 
}

int main() {
	ios_base::sync_with_stdio(0);
    cin.tie(0);  
   
	//istringstream input("8 2 4\n1 3\n6 8");
	//cin.rdbuf(input.rdbuf());
	
	long long  l_domow;
	int l_przedzialow;
	long long nr_szkoly;
	cin >> l_domow >> l_przedzialow >> nr_szkoly;
	
	vector<vector<long long>> przedzialy;
	
	bool szkola = false;
	for (int i = 0; i < l_przedzialow; i++) {
		long long dolny, gorny;
		cin >> dolny >> gorny;
		przedzialy.push_back({ dolny, gorny });
		if(dolny <= nr_szkoly && gorny >= nr_szkoly) szkola = true;
	}
	
	if(!szkola) przedzialy.push_back({ nr_szkoly, nr_szkoly });
	sort (przedzialy.begin(), przedzialy.end(), compare);


	long long lewy = 0;
	long long prawy = 0;
	
	for (int i = 0; i < l_przedzialow; i++) {
		
		if (i == 0 || przedzialy[i][0] - przedzialy[i - 1][1] > 1) lewy = przedzialy[i][0]-1;		
	
		if (przedzialy[i][0] <= nr_szkoly && przedzialy[i][1] >= nr_szkoly) {
			
			for (int j = i; j < l_przedzialow; j++) {
				
				if(j == l_przedzialow -1) {
					if(l_domow - przedzialy[j][1] >= 1) prawy = przedzialy[j][1]+1;
					break;
				}
				
				if (przedzialy[j+1][0] - przedzialy[j][1] > 1) {					
					prawy = przedzialy[j][1]+1;
					break;
				}
			
			}
			
			break;
		
		}
	
	}
	
	if (lewy <1) {
		cout << prawy;	
		return 0;
	}
	
	if (prawy <1) {
		cout << lewy;	
		return 0;
	}
	
	if (nr_szkoly-lewy > prawy-nr_szkoly) {
		cout << prawy;	
		return 0;
	}
	
	if (nr_szkoly-lewy < prawy-nr_szkoly) {
		cout << lewy;	
		return 0;
	}

	cout << min(lewy, prawy);
	return 0;
 }