#include <iostream> #include <map> using namespace std; int m; long long int l, r, n, s; map<long long int, long long int> left_for; map<long long int, long long int> right_for; long long int saved_range_left, saved_range_right; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> s; for (int i = 0; i < m; ++i) { cin >> l >> r; left_for[r] = l; right_for[l] = r; if (l <= s && s <= r) { saved_range_left = l; saved_range_right = r; } } --saved_range_left; ++saved_range_right; while (left_for.find(saved_range_left) != left_for.end()) saved_range_left = left_for.find(saved_range_left)->second - 1; while (right_for.find(saved_range_right) != right_for.end()) saved_range_right = right_for.find(saved_range_right)->second + 1; if (saved_range_left < 1) { cout << saved_range_right << endl; return 0; } if (saved_range_right > n) { cout << saved_range_left << endl; return 0; } if ((s - saved_range_left) <= (saved_range_right - s)) { cout << saved_range_left << endl; return 0; } cout << saved_range_right << endl; 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 | #include <iostream> #include <map> using namespace std; int m; long long int l, r, n, s; map<long long int, long long int> left_for; map<long long int, long long int> right_for; long long int saved_range_left, saved_range_right; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n >> m >> s; for (int i = 0; i < m; ++i) { cin >> l >> r; left_for[r] = l; right_for[l] = r; if (l <= s && s <= r) { saved_range_left = l; saved_range_right = r; } } --saved_range_left; ++saved_range_right; while (left_for.find(saved_range_left) != left_for.end()) saved_range_left = left_for.find(saved_range_left)->second - 1; while (right_for.find(saved_range_right) != right_for.end()) saved_range_right = right_for.find(saved_range_right)->second + 1; if (saved_range_left < 1) { cout << saved_range_right << endl; return 0; } if (saved_range_right > n) { cout << saved_range_left << endl; return 0; } if ((s - saved_range_left) <= (saved_range_right - s)) { cout << saved_range_left << endl; return 0; } cout << saved_range_right << endl; return 0; } |