//Karol Dziekan #include <bits/stdc++.h> using namespace std; #define endl '\n' #define LL long long int int main(){ std::ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); long long int ilosc_domy; long long int ilosc_przedzialy; long long int szkola; cin >> ilosc_domy >> ilosc_przedzialy >> szkola; vector<pair<long long int,long long int>> przedzialy; for (long long int i = 0; i < ilosc_przedzialy; i++){ long long int a,b; cin >> a >> b; przedzialy.push_back({a,b}); } sort(przedzialy.begin(), przedzialy.end()); //Znalezienie przedzialu w ktorym znajduje sie szkola long long int przedzial_szkoly; for(long long int i = 0; i < ilosc_przedzialy; i++){ long long int poczatek = przedzialy[i].first; long long int koniec = przedzialy[i].second; if (poczatek <= szkola && szkola <= koniec){ przedzial_szkoly = i; break; } } //Sprawdzenie na lewo long long int budynek_lewo,odleglosc_lewo = 1e18; for (long long int i = przedzial_szkoly; i >= 0; i--){ if (i == 0){ if (przedzialy[i].first - 1 >= 1){ budynek_lewo = przedzialy[i].first - 1; odleglosc_lewo = szkola - budynek_lewo; break; } }else{ if (przedzialy[i].first - 1 != przedzialy[i-1].second){ budynek_lewo = przedzialy[i].first - 1; odleglosc_lewo = szkola - budynek_lewo; break; } } } //Sprawdzenie na prawo long long int budynek_prawo,odleglosc_prawo = 1e18; for (long long int i = przedzial_szkoly; i < ilosc_przedzialy; i++){ if (i == ilosc_przedzialy - 1){ if (przedzialy[i].second + 1 <= ilosc_domy){ budynek_prawo = przedzialy[i].second + 1; odleglosc_prawo = budynek_prawo - szkola; break; } }else{ if (przedzialy[i].second + 1 != przedzialy[i+1].first){ budynek_prawo = przedzialy[i].second + 1; odleglosc_prawo = budynek_prawo - szkola; break; } } } //Wypisanie blizszego budynku z priorytetem na lewo if (odleglosc_lewo <= odleglosc_prawo){ cout << budynek_lewo; }else{ cout << budynek_prawo; } 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 84 85 86 87 | //Karol Dziekan #include <bits/stdc++.h> using namespace std; #define endl '\n' #define LL long long int int main(){ std::ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); long long int ilosc_domy; long long int ilosc_przedzialy; long long int szkola; cin >> ilosc_domy >> ilosc_przedzialy >> szkola; vector<pair<long long int,long long int>> przedzialy; for (long long int i = 0; i < ilosc_przedzialy; i++){ long long int a,b; cin >> a >> b; przedzialy.push_back({a,b}); } sort(przedzialy.begin(), przedzialy.end()); //Znalezienie przedzialu w ktorym znajduje sie szkola long long int przedzial_szkoly; for(long long int i = 0; i < ilosc_przedzialy; i++){ long long int poczatek = przedzialy[i].first; long long int koniec = przedzialy[i].second; if (poczatek <= szkola && szkola <= koniec){ przedzial_szkoly = i; break; } } //Sprawdzenie na lewo long long int budynek_lewo,odleglosc_lewo = 1e18; for (long long int i = przedzial_szkoly; i >= 0; i--){ if (i == 0){ if (przedzialy[i].first - 1 >= 1){ budynek_lewo = przedzialy[i].first - 1; odleglosc_lewo = szkola - budynek_lewo; break; } }else{ if (przedzialy[i].first - 1 != przedzialy[i-1].second){ budynek_lewo = przedzialy[i].first - 1; odleglosc_lewo = szkola - budynek_lewo; break; } } } //Sprawdzenie na prawo long long int budynek_prawo,odleglosc_prawo = 1e18; for (long long int i = przedzial_szkoly; i < ilosc_przedzialy; i++){ if (i == ilosc_przedzialy - 1){ if (przedzialy[i].second + 1 <= ilosc_domy){ budynek_prawo = przedzialy[i].second + 1; odleglosc_prawo = budynek_prawo - szkola; break; } }else{ if (przedzialy[i].second + 1 != przedzialy[i+1].first){ budynek_prawo = przedzialy[i].second + 1; odleglosc_prawo = budynek_prawo - szkola; break; } } } //Wypisanie blizszego budynku z priorytetem na lewo if (odleglosc_lewo <= odleglosc_prawo){ cout << budynek_lewo; }else{ cout << budynek_prawo; } return 0; } |