#include <iostream>
#include <vector>
#include <list>
#include <tuple>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long int lli;
struct range {
lli beg;
lli end;
bool contais(lli x) {
return x >= beg && x <= end;
}
};
lli n, m, s;
bool comp(range a, range b) {
return a.beg < b.beg;
}
int main() {
std::ios_base::sync_with_stdio(false);
std::cin.tie(nullptr);
vector<range> rang;
cin >> n >> m >> s;
lli cnt = m;
while(cnt--) {
range r;
cin >> r.beg >> r.end;
rang.push_back(r);
}
sort(rang.begin(), rang.end(), comp);
vector<range> merged;
range tmpr = rang[0];
lli sRangIdx = -1;
for ( int i = 1; i < m; ++i) {
if (rang[i].beg - tmpr.end <= 1) {
tmpr.end = rang[i].end;
} else {
merged.push_back(tmpr);
if (tmpr.contais(s)) sRangIdx = merged.size() - 1;
tmpr = rang[i];
}
}
merged.push_back(tmpr);
if (tmpr.contais(s)) sRangIdx = merged.size() - 1;
lli rl, rr;
rl = merged[sRangIdx].beg - 1;
rr = merged[sRangIdx].end + 1;
if (rl < 1) {
cout << rr;
} else if ( rr > n ) {
cout << rl;
} else {
if ( s - rl <= rr - s ) {
cout << rl;
} else {
cout << rr;
}
}
cout << "\n";
}
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 | #include <iostream> #include <vector> #include <list> #include <tuple> #include <queue> #include <algorithm> using namespace std; typedef long long int lli; struct range { lli beg; lli end; bool contais(lli x) { return x >= beg && x <= end; } }; lli n, m, s; bool comp(range a, range b) { return a.beg < b.beg; } int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); vector<range> rang; cin >> n >> m >> s; lli cnt = m; while(cnt--) { range r; cin >> r.beg >> r.end; rang.push_back(r); } sort(rang.begin(), rang.end(), comp); vector<range> merged; range tmpr = rang[0]; lli sRangIdx = -1; for ( int i = 1; i < m; ++i) { if (rang[i].beg - tmpr.end <= 1) { tmpr.end = rang[i].end; } else { merged.push_back(tmpr); if (tmpr.contais(s)) sRangIdx = merged.size() - 1; tmpr = rang[i]; } } merged.push_back(tmpr); if (tmpr.contais(s)) sRangIdx = merged.size() - 1; lli rl, rr; rl = merged[sRangIdx].beg - 1; rr = merged[sRangIdx].end + 1; if (rl < 1) { cout << rr; } else if ( rr > n ) { cout << rl; } else { if ( s - rl <= rr - s ) { cout << rl; } else { cout << rr; } } cout << "\n"; } |
English