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
#include <iostream>
#include <algorithm>
using namespace std;
pair<long long, long long> intervals[1002];
long long n, m, s;
int main() {
    cin >> n >> m >> s;

    for (int i = 1; i <= m; i++) {
        long long l, r;
        cin >> l >> r;
        intervals[i] = {l, r};
    }
    sort(intervals, intervals + m + 1);
    long long prev_free = 0;
    long long next_free = n + 1;
    pair<long, long> prev_interval = {0, 0};
    for (auto interval : intervals) {
        if (interval.first - 1 > prev_interval.second) {
            prev_free = interval.first - 1;
        }
        if (s >= interval.first && s <= interval.second) {
            break;
        }
        prev_interval = interval;
    }
    prev_interval = {n + 1, n + 1};
    for (int i = m; i >= 1; i--) {
        auto interval = intervals[i];
        if (interval.second + 1 < prev_interval.first) {
            next_free = interval.second + 1;
        }
        if (s >= interval.first && s <= interval.second) {
            break;
        }
        prev_interval = interval;
    }
    long long score = n;
    long long best_idx = 0;
    if (prev_free > 0) {
        score = s - prev_free;
        best_idx = prev_free;
    }
    if (next_free < n + 1) {
        if (next_free - s < score) {
            score = next_free - s;
            best_idx = next_free;
        }
    }
    cout << best_idx << endl;
    return 0;
}