#include <bits/stdc++.h>
using namespace std;
long long solve(long long n, int m, long long s, vector <pair<long long, long long>> &segs) {
vector <long long> cands;
for (auto &[l, r] : segs) {
if (l > 1) cands.push_back(l - 1);
if (r < n) cands.push_back(r + 1);
}
sort(cands.begin(), cands.end());
long long ans = -1, ansDist = n;
for (auto c : cands) {
bool covered = false;
for (auto [l, r] : segs) if (l <= c && c <= r) {
covered = true;
break;
}
if (!covered) {
long long dist = abs(s - c);
if (dist < ansDist) {
ans = c;
ansDist = dist;
}
}
}
return ans;
}
int main() {
ios_base::sync_with_stdio(false);
long long n, s;
int m;
cin >> n >> m >> s;
vector <pair<long long, long long>> segs(m);
for (auto &[l, r] : segs) {
cin >> l >> r;
}
cout << solve(n, m, s, segs);
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 | #include <bits/stdc++.h> using namespace std; long long solve(long long n, int m, long long s, vector <pair<long long, long long>> &segs) { vector <long long> cands; for (auto &[l, r] : segs) { if (l > 1) cands.push_back(l - 1); if (r < n) cands.push_back(r + 1); } sort(cands.begin(), cands.end()); long long ans = -1, ansDist = n; for (auto c : cands) { bool covered = false; for (auto [l, r] : segs) if (l <= c && c <= r) { covered = true; break; } if (!covered) { long long dist = abs(s - c); if (dist < ansDist) { ans = c; ansDist = dist; } } } return ans; } int main() { ios_base::sync_with_stdio(false); long long n, s; int m; cin >> n >> m >> s; vector <pair<long long, long long>> segs(m); for (auto &[l, r] : segs) { cin >> l >> r; } cout << solve(n, m, s, segs); return 0; } |
English