#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;
}
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; } |
English