#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
const int MAXM = 1005;
long long n, s;
int m;
vector<long long> l(MAXM), r(MAXM);
int find(long long x) {
for(int i = 0; i < m; i++) {
if(l[i] <= x && x <= r[i]) {
return i;
}
}
return -1;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m >> s;
for(int i = 0; i < m; i++) {
cin >> l[i] >> r[i];
}
long long left = s, right = s;
while(true) {
int ind = find(left);
if(ind == -1) break;
left = l[ind]-1;
}
while(true) {
int ind = find(right);
if(ind == -1) break;
right = r[ind]+1;
}
long long ans;
if(left < 1) ans = right;
else if(right > n) ans = left;
else {
if(abs(s-left) <= abs(s-right)) ans = left;
else ans = right;
}
cout << ans << "\n";
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 | #include <iostream> #include <vector> #include <cmath> using namespace std; const int MAXM = 1005; long long n, s; int m; vector<long long> l(MAXM), r(MAXM); int find(long long x) { for(int i = 0; i < m; i++) { if(l[i] <= x && x <= r[i]) { return i; } } return -1; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cin >> n >> m >> s; for(int i = 0; i < m; i++) { cin >> l[i] >> r[i]; } long long left = s, right = s; while(true) { int ind = find(left); if(ind == -1) break; left = l[ind]-1; } while(true) { int ind = find(right); if(ind == -1) break; right = r[ind]+1; } long long ans; if(left < 1) ans = right; else if(right > n) ans = left; else { if(abs(s-left) <= abs(s-right)) ans = left; else ans = right; } cout << ans << "\n"; return 0; } |
English