#ifdef _WIN32
#include <io.h>
#include <fcntl.h>
#endif
#include <assert.h>
#include <iostream>
#include <stdint.h>
typedef int64_t i64;
const i64 MaxN = 1000000000000;
const int MaxM = 1000;
i64 N;
int M;
i64 S;
i64 L[MaxM] = { 0 };
i64 R[MaxM] = { 0 };
int znajdz_przedzial(i64 Dom)
{
for (int i = 0; i < M; i++) {
if (L[i] <= Dom && Dom <= R[i]) {
return i;
}
}
return -1;
}
i64 szukaj_lewo()
{
i64 Lewy = S - 1;
while (Lewy > 0) {
int Przedzial = znajdz_przedzial(Lewy);
if (Przedzial < 0) {
break;
}
Lewy = L[Przedzial] - 1;
}
return Lewy;
}
i64 szukaj_prawo()
{
i64 Prawy = S + 1;
while (Prawy <= N) {
int Przedzial = znajdz_przedzial(Prawy);
if (Przedzial < 0) {
break;
}
Prawy = R[Przedzial] + 1;
}
return Prawy;
}
int main()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(NULL);
#ifdef _WIN32
_setmode( _fileno( stdout ), _O_BINARY );
#endif
std::cin >> N >> M >> S;
for (int i = 0; i < M; i++) {
std::cin >> L[i] >> R[i];
}
i64 Lewy = szukaj_lewo();
i64 Prawy = szukaj_prawo();
i64 Wynik = 0;
if (Lewy > 0 && Prawy <= N) {
if (S - Lewy <= Prawy - S) {
Wynik = Lewy;
} else {
Wynik = Prawy;
}
} else if (Lewy > 0) {
Wynik = Lewy;
} else if (Prawy <= N) {
Wynik = Prawy;
}
std::cout << Wynik << '\n';
std::cout.flush();
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 87 88 89 90 91 | #ifdef _WIN32 #include <io.h> #include <fcntl.h> #endif #include <assert.h> #include <iostream> #include <stdint.h> typedef int64_t i64; const i64 MaxN = 1000000000000; const int MaxM = 1000; i64 N; int M; i64 S; i64 L[MaxM] = { 0 }; i64 R[MaxM] = { 0 }; int znajdz_przedzial(i64 Dom) { for (int i = 0; i < M; i++) { if (L[i] <= Dom && Dom <= R[i]) { return i; } } return -1; } i64 szukaj_lewo() { i64 Lewy = S - 1; while (Lewy > 0) { int Przedzial = znajdz_przedzial(Lewy); if (Przedzial < 0) { break; } Lewy = L[Przedzial] - 1; } return Lewy; } i64 szukaj_prawo() { i64 Prawy = S + 1; while (Prawy <= N) { int Przedzial = znajdz_przedzial(Prawy); if (Przedzial < 0) { break; } Prawy = R[Przedzial] + 1; } return Prawy; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); #ifdef _WIN32 _setmode( _fileno( stdout ), _O_BINARY ); #endif std::cin >> N >> M >> S; for (int i = 0; i < M; i++) { std::cin >> L[i] >> R[i]; } i64 Lewy = szukaj_lewo(); i64 Prawy = szukaj_prawo(); i64 Wynik = 0; if (Lewy > 0 && Prawy <= N) { if (S - Lewy <= Prawy - S) { Wynik = Lewy; } else { Wynik = Prawy; } } else if (Lewy > 0) { Wynik = Lewy; } else if (Prawy <= N) { Wynik = Prawy; } std::cout << Wynik << '\n'; std::cout.flush(); return 0; } |
English