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
/* 2025
 * Maciej Szeptuch
 */
#include <algorithm>
#include <cstdio>

int intervals;
long long int buildings;
long long int school;
std::pair<long long int, long long int> occupied[1024];

int main(void)
{
    scanf("%lld %d %lld", &buildings, &intervals, &school);
    for(int i = 0; i < intervals; ++i)
        scanf("%lld %lld", &occupied[i].first, &occupied[i].second);

    std::sort(occupied, occupied + intervals);
    int school_interval = 0;
    while(school_interval < intervals && occupied[school_interval].second < school)
        ++school_interval;

    int left = school_interval;
    while(left > 0 && occupied[left - 1].second + 1 == occupied[left].first)
        --left;

    int right = school_interval;
    while(right < intervals - 1 && occupied[right].second + 1 == occupied[right + 1].first)
        ++right;

    long long int best = occupied[left].first - 1;
    if(!best)
        best = occupied[right].second + 1;

    else if(occupied[right].second + 1 <= buildings && school - best > occupied[right].second + 1 - school)
        best = occupied[right].second + 1;

    printf("%lld\n", best);
    return 0;
}