米奥莉奈请小水星吃番茄,
米奥莉奈总共摘下了$n$个番茄,这些番茄的大小由$a_{0...n-1}$表示,
为了防止小水星过于激动,一不小心把番茄拍烂,米奥莉奈希望这些番茄的大小较为平均,不要过大或过小,因此,米奥莉奈想知道这些番茄的"排序相邻大小差"$dlt$,
具体的,设数组$p$表示数字$a$按升序排序的结果,则:
$$dlt = \max_{i=1}^{n-1} \{ p_i - p_{i-1} \}$$
为了防止番茄被拍碎,你能帮帮米奥莉奈求出"排序相邻大小差"$dlt$吗?
选手请注意,由于输入数据过多,本题采用混合输入方式,
第一行包含一个整数 $n (2\leq n\leq 7\times 10^7)$,表示番茄个数。
如果$n \leq 100000$,则:
第二行$n$个正整数,第$i$个数表示$a_i (0\leq a_i \leq 10^9)$;
如果$n > 100000$,则:
第二行$4$个正整数$mo, x, y, a_0 (0\leq x,y,a_0 \leq 10^9, 1\leq mo \leq 10^9)$,其中前三个数表示生成参数,$a$数组由下列公式递推生成:$a_i = ((a_{i-1} \oplus x)+y)\mod mo$
,其中$\oplus$表示二进制异或;
下面给出C++读入代码供选手参考:
void InputAll(int &n, std::vector<int> &a)
{
scanf("%d", &n);
if (n <= 100000)
{
for (int i = 0; i < n; ++i)
{
int v;
scanf("%d", &v);
a.push_back(v);
}
}
else
{
int mo, x, y, v;
scanf("%d%d%d%d", &mo, &x, &y, &v);
for (int i = 0; i < n; ++i)
{
a.push_back(v);
v = (((long long)v ^ x) + y) % mo;
}
}
}
一行,一个正整数,表示"排序相邻大小差"$dlt$;
输入
样例一
5
1 3 6 9 12
样例二
10
0 8 45 88 48 68 28 55 17 24
样例三
120000000
536870912 1024 1024 1
输出
样例一
3
样例二
20
样例三
2048