#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct range {
long long begin, end;
};
bool cmp(const range &a, const range &b) {
if (a.begin < b.begin) return true;
return false;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
long long n, m, s;
cin >> n >> m >> s;
vector<range> v(m);
for (int i = 0; i < m; i++) {
cin >> v[i].begin >> v[i].end;
}
sort(v.begin(), v.end(), cmp);
vector<range> w;
w.push_back(v[0]);
for (int i = 1; i < m; i++){
if (v[i - 1].end + 1 == v[i].begin) w[w.size() - 1].end = v[i].end;
else w.push_back(v[i]);
}
long long dist = 1'000'000'000'000'000'000, building = -1;
for (range &e : w) {
if (e.begin <= s && s <= e.end) {
long building_before = e.begin - 1;
long building_after = e.end + 1;
if (e.begin - 1 >= 1 && s - building_before < dist) {
dist = s - building_before;
building = building_before;
}
if (e.end + 1 <= n && building_after - s < dist) {
dist = building_after - s;
building = building_after;
}
}
}
cout << building << endl;
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 | #include<iostream> #include<vector> #include<algorithm> using namespace std; struct range { long long begin, end; }; bool cmp(const range &a, const range &b) { if (a.begin < b.begin) return true; return false; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); long long n, m, s; cin >> n >> m >> s; vector<range> v(m); for (int i = 0; i < m; i++) { cin >> v[i].begin >> v[i].end; } sort(v.begin(), v.end(), cmp); vector<range> w; w.push_back(v[0]); for (int i = 1; i < m; i++){ if (v[i - 1].end + 1 == v[i].begin) w[w.size() - 1].end = v[i].end; else w.push_back(v[i]); } long long dist = 1'000'000'000'000'000'000, building = -1; for (range &e : w) { if (e.begin <= s && s <= e.end) { long building_before = e.begin - 1; long building_after = e.end + 1; if (e.begin - 1 >= 1 && s - building_before < dist) { dist = s - building_before; building = building_before; } if (e.end + 1 <= n && building_after - s < dist) { dist = building_after - s; building = building_after; } } } cout << building << endl; return 0; } |
English