Problem:
Score : 300 points

Problem Statement

Given are an integer X and an integer sequence of length N: p_1, \ldots, p_N.

Among the integers not contained in the sequence p_1, \ldots, p_N (not necessarily positive), find the integer nearest to X, that is, find the integer whose absolute difference with X is the minimum. If there are multiple such integers, report the smallest such integer.

Constraints

1 \leq X \leq 100

0 \leq N \leq 100

1 \leq p_i \leq 100

p_1, \ldots, p_N are all distinct.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

X N
p_1 ... p_N

Output

Print the answer.

Sample Input 1

6 5
4 7 10 6 5

Sample Output 1

8

Among the integers not contained in the sequence 4, 7, 10, 6, 5, the one nearest to 6 is 8.

Sample Input 2

10 5
4 7 10 6 5

Sample Output 2

9

Among the integers not contained in the sequence 4, 7, 10, 6, 5, the ones nearest to 10 are 9 and 11. We should print the smaller one, 9.

Sample Input 3

100 0

Sample Output 3

100

When N = 0, the second line in the input will be empty. Also, as seen here, X itself can be the answer.

Solution in Rust (1.42.0) (judge verdict: Accepted)

use std::io::*;
use std::str::FromStr;

//https://qiita.com/tubo28/items/e6076e9040da57368845
fn read<T: FromStr>() -> T {
    let stdin = stdin();
    let stdin = stdin.lock();
    let token: String = stdin
        .bytes()
        .map(|c| c.expect("failed to read char") as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect();
    token.parse().ok().expect("failed to parse token")
}

fn main() {
    let x = read();
    let n:usize = read();
    let mut p:Vec<i32> = (0..n).map(|_| read()).collect();

    p.sort();

    let x_pos = p.iter().position(|&v| v==x );

    if x_pos == None {
        println!("{}",x);
    }else{
        //小さい方を探索
        let min;
        if x_pos.unwrap() == 0 {
            min = x - 1;
        }else{
            let mut i = x_pos.unwrap() - 1;
            let mut c = 1;
            loop{
                //println!("i{}",i);
                if p[i] == x - c {
                    //println!("c{}",c);
                    if i == 0{
                        //println!("min_i{}",i);
                        min = x-c-1;
                        break;
                    }
                    i -= 1;
                    c += 1;
                }else{
                    //println!("else i{}",i);
                    min = x-c;
                    break;
                }
            }
        }
        //大きい方を探索
        let max;
        if x_pos.unwrap() == n-1 {
            max = x + 1;
        }else{
            let mut i = x_pos.unwrap() + 1;
            let mut c = 1;
            loop{
                //println!("i{}",i);
                if p[i] == x + c {
                    //println!("c{}",c);
                    i += 1;
                    c += 1;
                }else{
                    //println!("else i{}",i);
                    max = x+c;
                    break;
                }
                if i == n{
                    //println!("max_i{}",i);
                    max = x+c;
                    break;
                }
            }
        }
        let l = (x-min).abs();
        let r = (x-max).abs();
        if l <= r{
            println!("{}",min);
        }else{
            println!("{}",max);
        }
        //println!("min{:?} max{:?}",min,max);
    }

}