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
#include <bits/stdc++.h>
using namespace std;

long long findClosestLeft(vector<pair<long long, long long>>& ranges, auto buildingAddress) {
    if (buildingAddress == ranges.begin() || buildingAddress->first - 1 > (buildingAddress - 1)->second) {
        return buildingAddress->first - 1;
    }

    return findClosestLeft(ranges, buildingAddress - 1);
}

long long findClosestRight(vector<pair<long long, long long>>& ranges, auto buildingAddress) {
    if (buildingAddress == ranges.end() - 1 || buildingAddress->second + 1 < (buildingAddress + 1)->first) {
        return buildingAddress->second + 1;
    }

    return findClosestRight(ranges, buildingAddress + 1);
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);

    long long buildingsNb, rangesNb, school;
    cin >> buildingsNb >> rangesNb >> school;

    vector<pair<long long, long long>> ranges(rangesNb);
    for (long long i = 0; i < rangesNb; i++) cin >> ranges[i].first >> ranges[i].second;

    ranges::sort(ranges);
    auto schoolAddress = lower_bound(ranges.begin(), ranges.end(), school, [](const pair<long long, long long> &p, const long long &l) {
        return p.second < l;
    });

    long long closestLeft = findClosestLeft(ranges, schoolAddress);
    long long closestRight = findClosestRight(ranges, schoolAddress);

    if (closestLeft == 0) {
        cout << closestRight << endl;
    }

    else if (closestRight > buildingsNb) {
        cout << closestLeft << endl;
    }

    else if (school - closestLeft <= closestRight - school) {
        cout << closestLeft << endl;
    }

    else {
        cout << closestRight << endl;
    }
}