#D0938. 棋子旅行

棋子旅行

题目描述

一排格子的编号从 11 到 nn,其中 mm 个格子上已经放着棋子,位置互不相同。现在会在一个空格子再放一枚新棋子,之后只移动这枚新棋子。

一次移动的规则如下:设新棋子当前在格子 xx,另有一颗不动的棋子在格子 pp,令 y=2p−xy=2p-x。如果 yy 在 1∼n1\sim n 内、yy 上没有棋子,并且 xx 与 yy 之间(不含 pp)没有其他棋子,就可以把新棋子从 xx 移到 yy。也就是说,新棋子以 pp 为支点,对称地跳到另一侧的空格上。

新棋子的位置始终在空格上。可以任意选择一个空格子放新棋子,最终停在某个格子上。请输出它能得到的最大移动距离,也就是起止格子编号之差的绝对值。

输入格式

第一行两个整数 n,mn,m。

第二行 mm 个整数 a1,a2,…,ama_1,a_2,\dots,a_m,表示已有棋子的位置,保证互不相同。

输出格式

输出一个整数,表示最大移动距离。

样例

7 2
3 5
4
4 1
2
2
8 2
4 5
0

样例解释

样例 1 中,把新棋子放在第 2 格,先以第 3 格的棋子为支点跳到第 4 格,再以第 5 格的棋子为支点跳到第 6 格,起止距离为 6−2=46-2=4。

样例 2 中,把新棋子放在第 4 格,以第 2 格为支点跳到第 0 格不行;放在第 1 格可跳到第 3 格,距离为 22。

样例 3 中两颗棋子相邻,任何跳跃都会被挡住,最大距离为 00。

数据范围与约定

子任务 分值 限制
11 3030 m=1m=1,n≤2×105n\le 2\times10^5
22 n≤1000n\le 1000
33 4040 1≤m<n≤2×1051\le m<n\le 2\times10^5

对于 100%100\% 的数据,1≤m<n≤2×1051\le m<n\le 2\times10^5,1≤ai≤n1\le a_i\le n。