#include<cstdio>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;
int main() {
long long buildingsNum;
int intervalsNum;
long long school;
scanf("%lld %d %lld\n", &buildingsNum, &intervalsNum, &school);
vector<pair<long long, long long> > intervals;
for (int i = 0; i < intervalsNum; i++) {
long long left;
long long right;
scanf("%lld %lld\n", &left, &right);
pair<long long, long long> interval(left, right);
intervals.push_back(interval);
}
sort(intervals.begin(), intervals.end());
long long lastFromLeft = buildingsNum + 1;
long long firstFromRight = -1;
int i = 0;
while (intervals[i].first > school || intervals[i].second < school) {
if (i == 0) {
if (intervals[i].first > 1) {
lastFromLeft = intervals[i].first - 1;
}
} else {
if (intervals[i].first > intervals[i - 1].second + 1) {
lastFromLeft = intervals[i].first - 1;
}
}
i++;
}
if (i == 0) {
if (intervals[i].first > 1) {
lastFromLeft = intervals[i].first - 1;
}
} else {
if (intervals[i].first > intervals[i - 1].second + 1) {
lastFromLeft = intervals[i].first - 1;
}
}
while (i + 1 < intervalsNum && intervals[i + 1].first == intervals[i].second + 1) {
i++;
}
if (i + 1 < intervalsNum) {
firstFromRight = intervals[i].second + 1;
} else if (intervals[i].second < buildingsNum) {
firstFromRight = intervals[i].second + 1;
}
long long leftDistance = buildingsNum;
long long rightDistance = buildingsNum;
if (lastFromLeft < school) {
leftDistance = school - lastFromLeft;
}
if (firstFromRight > school) {
rightDistance = firstFromRight - school;
}
if (rightDistance < leftDistance) {
printf("%lld\n", firstFromRight);
} else {
printf("%lld\n", lastFromLeft);
}
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 73 74 75 76 77 78 79 80 81 82 83 | #include<cstdio> #include<vector> #include<utility> #include<algorithm> using namespace std; int main() { long long buildingsNum; int intervalsNum; long long school; scanf("%lld %d %lld\n", &buildingsNum, &intervalsNum, &school); vector<pair<long long, long long> > intervals; for (int i = 0; i < intervalsNum; i++) { long long left; long long right; scanf("%lld %lld\n", &left, &right); pair<long long, long long> interval(left, right); intervals.push_back(interval); } sort(intervals.begin(), intervals.end()); long long lastFromLeft = buildingsNum + 1; long long firstFromRight = -1; int i = 0; while (intervals[i].first > school || intervals[i].second < school) { if (i == 0) { if (intervals[i].first > 1) { lastFromLeft = intervals[i].first - 1; } } else { if (intervals[i].first > intervals[i - 1].second + 1) { lastFromLeft = intervals[i].first - 1; } } i++; } if (i == 0) { if (intervals[i].first > 1) { lastFromLeft = intervals[i].first - 1; } } else { if (intervals[i].first > intervals[i - 1].second + 1) { lastFromLeft = intervals[i].first - 1; } } while (i + 1 < intervalsNum && intervals[i + 1].first == intervals[i].second + 1) { i++; } if (i + 1 < intervalsNum) { firstFromRight = intervals[i].second + 1; } else if (intervals[i].second < buildingsNum) { firstFromRight = intervals[i].second + 1; } long long leftDistance = buildingsNum; long long rightDistance = buildingsNum; if (lastFromLeft < school) { leftDistance = school - lastFromLeft; } if (firstFromRight > school) { rightDistance = firstFromRight - school; } if (rightDistance < leftDistance) { printf("%lld\n", firstFromRight); } else { printf("%lld\n", lastFromLeft); } return 0; } |
English