题目描述

米奥莉奈请小水星吃番茄,

米奥莉奈总共摘下了$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

备注


操作

评测记录

优秀代码

信息

时间限制: 8s
内存限制: 1224MB
评测模式: Normal

题解