#include <iostream>
#include<set>
using namespace std;
set<pair<long long,long long>> kol;
set<pair<long long,long long>> kol2;
void merge(){
auto z=kol.begin(),z2=z;
z2++;
pair<long long,long long> pom;
while(z2!=kol.end()){
pom.first=z->first;
pom.second=z->second;
//cout<<pom.first<<' '<<pom.second<<endl;
while(z->second==z2->first-1&&z2!=kol.end()){
z++;
z2++;
pom.second=z->second;
//
}
kol2.insert(pom);
if(z2==kol.end()){
z2=z;
z--;
}
z++;
z2++;
if(pom.second!=z->second&&z2==kol.end()){
kol2.insert(*z);
}
}
}
int main(){
long long n,m,s,a,b;
cin>>n>>m>>s;
for(int i=0;i<m;i++){
cin>>a>>b;
kol.insert({a,b});
}
merge();
auto z=kol2.upper_bound({s,s});
if(z==kol2.end()){
z=prev(z);
}
else if(z->first>s&&z!=kol2.begin()){
z--;
}
else if(z->second<s&&z!=kol2.begin()){
z++;
}
// /cout<<z->first<<' '<<z->second;
if(z->first-1<1){
cout<<z->second+1;
}
else if(z->second+1>n){
cout<<z->first-1;
}
else if(s-z->first<=z->second-s){
cout<<z->first-1;
}
else{
cout<<z->second+1;
}
// cout<<z->first<<' '<<z->second;
}
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 84 85 86 87 88 89 | #include <iostream> #include<set> using namespace std; set<pair<long long,long long>> kol; set<pair<long long,long long>> kol2; void merge(){ auto z=kol.begin(),z2=z; z2++; pair<long long,long long> pom; while(z2!=kol.end()){ pom.first=z->first; pom.second=z->second; //cout<<pom.first<<' '<<pom.second<<endl; while(z->second==z2->first-1&&z2!=kol.end()){ z++; z2++; pom.second=z->second; // } kol2.insert(pom); if(z2==kol.end()){ z2=z; z--; } z++; z2++; if(pom.second!=z->second&&z2==kol.end()){ kol2.insert(*z); } } } int main(){ long long n,m,s,a,b; cin>>n>>m>>s; for(int i=0;i<m;i++){ cin>>a>>b; kol.insert({a,b}); } merge(); auto z=kol2.upper_bound({s,s}); if(z==kol2.end()){ z=prev(z); } else if(z->first>s&&z!=kol2.begin()){ z--; } else if(z->second<s&&z!=kol2.begin()){ z++; } // /cout<<z->first<<' '<<z->second; if(z->first-1<1){ cout<<z->second+1; } else if(z->second+1>n){ cout<<z->first-1; } else if(s-z->first<=z->second-s){ cout<<z->first-1; } else{ cout<<z->second+1; } // cout<<z->first<<' '<<z->second; } |
English