// PA2025, @mjm, r2c-szk
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
using lol = long long;
inline int nextInt() { int n; scanf("%d", &n); return n; }
inline lol nextLol() { lol n; scanf("%lld", &n); return n; }
lol solve() {
lol n = nextLol();
int m = nextInt();
lol s = nextLol();
vector<lol> be;
vector<lol> en;
for (int i = 0; i < m; ++i) {
be.push_back(nextLol());
en.push_back(nextLol());
}
sort(be.begin(), be.end());
sort(en.begin(), en.end());
auto itBe1 = upper_bound(be.begin(), be.end(), s);
--itBe1;
auto itEn1 = lower_bound(en.begin(), en.end(), s);
auto itBe2 = itBe1;
auto itEn2 = itEn1;
lol res1;
while (true) {
res1 = (*itBe1) - 1;
if (itBe1 == be.begin()) break;
--itBe1;
--itEn1;
if ((*itEn1) < res1) break;
}
lol res2;
while (true) {
res2 = (*itEn2) + 1;
++itBe2;
++itEn2;
if (itEn2 == en.end()) break;
if (res2 < (*itBe2)) break;
}
if (res1 < 1) return res2;
if (res2 > n) return res1;
if (res2 - s < s - res1) return res2;
return res1;
}
int main() {
lol res = solve();
printf("%lld\n", res);
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 | // PA2025, @mjm, r2c-szk #include <cstdio> #include <vector> #include <algorithm> using namespace std; using lol = long long; inline int nextInt() { int n; scanf("%d", &n); return n; } inline lol nextLol() { lol n; scanf("%lld", &n); return n; } lol solve() { lol n = nextLol(); int m = nextInt(); lol s = nextLol(); vector<lol> be; vector<lol> en; for (int i = 0; i < m; ++i) { be.push_back(nextLol()); en.push_back(nextLol()); } sort(be.begin(), be.end()); sort(en.begin(), en.end()); auto itBe1 = upper_bound(be.begin(), be.end(), s); --itBe1; auto itEn1 = lower_bound(en.begin(), en.end(), s); auto itBe2 = itBe1; auto itEn2 = itEn1; lol res1; while (true) { res1 = (*itBe1) - 1; if (itBe1 == be.begin()) break; --itBe1; --itEn1; if ((*itEn1) < res1) break; } lol res2; while (true) { res2 = (*itEn2) + 1; ++itBe2; ++itEn2; if (itEn2 == en.end()) break; if (res2 < (*itBe2)) break; } if (res1 < 1) return res2; if (res2 > n) return res1; if (res2 - s < s - res1) return res2; return res1; } int main() { lol res = solve(); printf("%lld\n", res); return 0; } |
English