#include <bits/stdc++.h>
using namespace std;
int main()
{
long long n,s;
int m;
cin >> n >> m >> s;
vector<pair<long long, long long>> taken(m);
for(int i = 0; i < m; i++)
{
cin >> taken[i].first >> taken[i].second;
}
sort(taken.begin(), taken.end());
long long minimum = 1e13;
long long min_pos = -1;
for(int i = 0; i < m; i++)
{
if(taken[i].first <= s && s <= taken[i].second)
{
int right = i;
int left = i;
while(right < m - 1)
{
if(taken[right].second + 1 < taken[right + 1].first)
{
break;
}
right++;
}
while(left > 0)
{
if(taken[left].first - 1 > taken[left - 1].second)
{
break;
}
left--;
}
if(taken[left].first != 1)
{
minimum = s - (taken[left].first - 1);
min_pos = taken[left].first - 1;
}
if(taken[right].second != n)
{
if((taken[right].second + 1) - s < minimum)
{
minimum = (taken[right].second + 1);
min_pos = taken[right].second + 1;
}
}
break;
}
}
cout << min_pos;
}
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 | #include <bits/stdc++.h> using namespace std; int main() { long long n,s; int m; cin >> n >> m >> s; vector<pair<long long, long long>> taken(m); for(int i = 0; i < m; i++) { cin >> taken[i].first >> taken[i].second; } sort(taken.begin(), taken.end()); long long minimum = 1e13; long long min_pos = -1; for(int i = 0; i < m; i++) { if(taken[i].first <= s && s <= taken[i].second) { int right = i; int left = i; while(right < m - 1) { if(taken[right].second + 1 < taken[right + 1].first) { break; } right++; } while(left > 0) { if(taken[left].first - 1 > taken[left - 1].second) { break; } left--; } if(taken[left].first != 1) { minimum = s - (taken[left].first - 1); min_pos = taken[left].first - 1; } if(taken[right].second != n) { if((taken[right].second + 1) - s < minimum) { minimum = (taken[right].second + 1); min_pos = taken[right].second + 1; } } break; } } cout << min_pos; } |
English