#include <cstdio>
#include <vector>
#include <algorithm>
long long int n, m, s;
std::vector<std::pair<long long int, long long int>> Q;
long long int find_building()
{
int i;
long long int last, left = -1, right = -1;
/* school location */
for (i = 0; i < m; ++i) {
if (s >= Q[i].first && s <= Q[i].second)
break;
}
/* assume we found it */
/* left */
last = Q[i].first;
for (int j = i - 1; j >= 0; --j) {
if (Q[j].second + 1 < last) {
left = last - 1;
break;
}
last = Q[j].first;
}
if (left == -1 && Q[0].first > 1)
left = Q[0].first - 1;
/* right */
last = Q[i].second;
for (int j = i + 1; j < m; ++j) {
if (Q[j].first - 1 > last) {
right = last + 1;
break;
}
last = Q[j].second;
}
if (right == -1 && Q[m-1].second < n)
right = Q[m-1].second + 1;
if (right > 0) {
if (right - s < s - left || left <= 0)
return right;
}
return left;
}
int main()
{
scanf("%lld%lld%lld", &n, &m, &s);
Q.resize(m);
for (int i = 0; i < m; ++i) {
long long int a, b;
scanf("%lld%lld", &Q[i].first, &Q[i].second);
}
std::sort(Q.begin(), Q.end());
printf("%lld\n", find_building());
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 | #include <cstdio> #include <vector> #include <algorithm> long long int n, m, s; std::vector<std::pair<long long int, long long int>> Q; long long int find_building() { int i; long long int last, left = -1, right = -1; /* school location */ for (i = 0; i < m; ++i) { if (s >= Q[i].first && s <= Q[i].second) break; } /* assume we found it */ /* left */ last = Q[i].first; for (int j = i - 1; j >= 0; --j) { if (Q[j].second + 1 < last) { left = last - 1; break; } last = Q[j].first; } if (left == -1 && Q[0].first > 1) left = Q[0].first - 1; /* right */ last = Q[i].second; for (int j = i + 1; j < m; ++j) { if (Q[j].first - 1 > last) { right = last + 1; break; } last = Q[j].second; } if (right == -1 && Q[m-1].second < n) right = Q[m-1].second + 1; if (right > 0) { if (right - s < s - left || left <= 0) return right; } return left; } int main() { scanf("%lld%lld%lld", &n, &m, &s); Q.resize(m); for (int i = 0; i < m; ++i) { long long int a, b; scanf("%lld%lld", &Q[i].first, &Q[i].second); } std::sort(Q.begin(), Q.end()); printf("%lld\n", find_building()); return 0; } |
English