#include <bits/stdc++.h>
using namespace std;
#define int long long
#define st first
#define nd second
constexpr int maxn = 1e6 + 7;
int z, n, m, s, res, poz, poc, id;
pair<int, int> pary[maxn], p[maxn];
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m >> s;
for(int i = 1; i <= m; i++){
cin >> pary[i].st >> pary[i].nd;
}
sort(pary + 1, pary + m + 1);
poc = pary[1].st;
for(int i = 2; i <= m; i++){
if(pary[i - 1].nd + 1 == pary[i].st){
}
else{
p[++id] = {poc, pary[i - 1].nd};
poc = pary[i].st;
}
}
if(p[id].st != poc) p[++id] = {poc, pary[m].nd};
sort(p + 1, p + id + 1);
// for(int i = 1; i <= id; i++){
// cout << p[i].st << " " << p[i].nd << " ";
// }
// cout << '\n';
res = LLONG_MAX;
for(int i = 1; i <= id; i++){
if(p[i].st == 1){
if(abs(s - p[i].nd) < res){
poz = p[i].nd + 1;
res = abs(s - p[i].nd);
}
continue;
}
if(p[i].nd == n){
if(abs(s - p[i].st) < res){
poz = p[i].st - 1;
res = abs(s - p[i].st);
}
continue;
}
if(abs(s - p[i].st) == abs(s - p[i].nd) && res > abs(s - p[i].st)){
res = abs(s - p[i].st);
poz = p[i].st - 1;
}
else if(res > min(abs(s - p[i].st), abs(s - p[i].nd))){
if(abs(s - p[i].st) < abs(s - p[i].nd))
poz = p[i].st - 1;
else
poz = p[i].nd + 1;
res = min(abs(s - p[i].st), abs(s - p[i].nd));
}
}
cout << poz << '\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 | #include <bits/stdc++.h> using namespace std; #define int long long #define st first #define nd second constexpr int maxn = 1e6 + 7; int z, n, m, s, res, poz, poc, id; pair<int, int> pary[maxn], p[maxn]; int32_t main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m >> s; for(int i = 1; i <= m; i++){ cin >> pary[i].st >> pary[i].nd; } sort(pary + 1, pary + m + 1); poc = pary[1].st; for(int i = 2; i <= m; i++){ if(pary[i - 1].nd + 1 == pary[i].st){ } else{ p[++id] = {poc, pary[i - 1].nd}; poc = pary[i].st; } } if(p[id].st != poc) p[++id] = {poc, pary[m].nd}; sort(p + 1, p + id + 1); // for(int i = 1; i <= id; i++){ // cout << p[i].st << " " << p[i].nd << " "; // } // cout << '\n'; res = LLONG_MAX; for(int i = 1; i <= id; i++){ if(p[i].st == 1){ if(abs(s - p[i].nd) < res){ poz = p[i].nd + 1; res = abs(s - p[i].nd); } continue; } if(p[i].nd == n){ if(abs(s - p[i].st) < res){ poz = p[i].st - 1; res = abs(s - p[i].st); } continue; } if(abs(s - p[i].st) == abs(s - p[i].nd) && res > abs(s - p[i].st)){ res = abs(s - p[i].st); poz = p[i].st - 1; } else if(res > min(abs(s - p[i].st), abs(s - p[i].nd))){ if(abs(s - p[i].st) < abs(s - p[i].nd)) poz = p[i].st - 1; else poz = p[i].nd + 1; res = min(abs(s - p[i].st), abs(s - p[i].nd)); } } cout << poz << '\n'; } |
English