Problem:
Gossip

Problem

1からnまでの番号が順番に割り当てられているn人のアイドルが横一列に並んでいる。

アイドルiは単位時間でアイドルi-1とアイドルi+1に情報を伝達することができる。ただし、アイドル1はアイドル2にしか情報を伝達できず、アイドルnはアイドルn-1にしか情報を伝達できない。

時刻0の時点で、番号がa1, a2, ..., amであるm人のアイドルが秘密の情報を持っている。すべてのアイドルが秘密の情報を得ることのできる最小の時間を求めよ。

Input

入力は以下の形式で与えられる。

n m
a1 a2 ... am

1行目に2つの整数nとmが空白区切りで与えられる。

2行目にm個の整数a1, a2, ..., amが空白区切りで与えられる。

Constraints

2 ≤ n ≤ 105

1 ≤ m ≤ n

1 ≤ ai ≤ n

aiの値は全て異なる

aiは昇順で与えられる

Output

すべてのアイドルに情報が伝わる最小の時間を1行に出力する。

Sample Input 1

3 2
1 3

Sample Output 1

1

Sample Input 2

10 3
2 5 7

Sample Output 2

3

Sample Input 3

10 5
2 5 6 8 10

Sample Output 3

1

Sample Input 4

100000 1
1

Sample Output 4

99999

Solution in JAVA (judge verdict: Accepted)

import java.util.BitSet;
import java.util.Scanner;

public class Main {
	public static void main(String[] args){
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int m = in.nextInt();
//		int[] a = new int[n];
		BitSet bs = new BitSet(n);
		for(int i=0; i<m; i++){
//			a[in.nextInt()] = 1;
			bs.set(in.nextInt()-1);
		}
		int bf = -1;
		int[] dist = new int[n];
		for(int i=0; i<n; i++){
			if(bs.get(i)) bf = i;
			if(bf>=0){
				dist[i] = Math.abs(i-bf);
			}else{
				dist[i] = Integer.MAX_VALUE;
			}
		}
		bf = -1;
		for(int i=n-1; i>=0; i--){
			if(bs.get(i)) bf = i;
			if(bf>=0){
				dist[i] = Math.min(dist[i], Math.abs(i-bf));
			}
		}
		int max = 0;
		for(int i=0; i<n; i++){
			
		}
		for(int i=0; i<n; i++) max = Math.max(max, dist[i]);
		System.out.println(max);
	}
}