#P15615. [ICPC 2021 Jakarta R] Maxdifficent Group

[ICPC 2021 Jakarta R] Maxdifficent Group

说明

给定一个整数数组 A1..NA_{1..N},其中 N2N \geq 2。需要将 AA 中的每个元素分配到一个组中,同时满足以下规则:

  • 每个元素恰好属于一个组。
  • 如果 AiA_{i}AjA_{j}(其中 i<ji < j)属于同一组,那么对于所有 ikji \leq k \leq jAkA_{k} 也与 AiA_{i}AjA_{j} 属于同一组。
  • 至少存在一对元素属于不同的组。

GiG_{i} 表示元素 AiA_{i} 的组编号。一个组的成本等于该组中所有 AA 的元素之和:

$$\text{cost}(x) = \sum_{i \text{ 满足 } G_{i} = x} A_{i}$$

两个不同的组编号 GiG_{i}GjG_{j}(其中 GiGjG_{i} \neq G_{j})被称为 相邻 的,当且仅当对于所有 ikji \leq k \leq jGkG_{k} 要么是 GiG_{i} 要么是 GjG_{j}。最后,两个组编号 xxyydiff()\text{diff}() 值定义为 cost(x)\text{cost}(x)cost(y)\text{cost}(y) 之差的绝对值:

$$\text{diff}(x, y) = |\text{cost}(x) - \text{cost}(y)|$$

你的任务是找到一种分组方式,使得任意一对相邻组编号之间的 diff()\text{diff}() 值的最大值尽可能大;你只需要输出这个最大的 diff()\text{diff}() 值。

例如,设 A1..4={100,30,20,70}A_{1..4} = \{100, -30, -20, 70\}。在此例中,有 88 种将 AA 中每个元素分配到组的方式;其中一些如下所示:

  • G1..4={1,2,3,4}G_{1..4} = \{1, 2, 3, 4\}。有 33 对相邻的组编号,它们的 diff()\text{diff}() 值分别为:
    • $\text{diff}(1, 2) = |\text{cost}(1) - \text{cost}(2)| = |(100) - (-30)| = 130$,
    • $\text{diff}(2, 3) = |\text{cost}(2) - \text{cost}(3)| = |(-30) - (-20)| = 10$,
    • $\text{diff}(3, 4) = |\text{cost}(3) - \text{cost}(4)| = |(-20) - (70)| = 90$。

此分组方式中最大的 diff()\text{diff}() 值为 130130

  • G1..4={1,2,2,3}G_{1..4} = \{1, 2, 2, 3\}。有 22 对相邻的组编号,它们的 diff()\text{diff}() 值分别为:
    • $\text{diff}(1, 2) = |\text{cost}(1) - \text{cost}(2)| = |(100) - (-30 + (-20))| = 150$,
    • $\text{diff}(2, 3) = |\text{cost}(2) - \text{cost}(3)| = |(-30 + (-20)) - (-20)| = 70$。

此分组方式中最大的 diff()\text{diff}() 值为 150150

其他 66 种分组方式为:G1..4={1,1,1,2}G_{1..4} = \{1, 1, 1, 2\}G1..4={1,1,2,2}G_{1..4} = \{1, 1, 2, 2\}G1..4={1,2,2,2}G_{1..4} = \{1, 2, 2, 2\}G1..4={1,1,2,2}G_{1..4} = \{1, 1, 2, 2\}G1..4={1,1,2,3}G_{1..4} = \{1, 1, 2, 3\}G1..4={1,2,3,3}G_{1..4} = \{1, 2, 3, 3\}。在此例的所有可能分组方式中,从分组方式 G1..4={1,2,2,3}G_{1..4} = \{1, 2, 2, 3\} 可获得的最大 diff()\text{diff}() 值为 150150

输入格式

输入第一行包含一个整数 NN2N1000002 \leq N \leq 100\,000),表示数组 AA 中元素的个数。下一行包含 NN 个整数 AiA_{i}106Ai106-10^{6} \leq A_{i} \leq 10^{6}),表示数组 AA

输出格式

输出一行一个整数,表示通过某种分组方式所能获得的最大可能的 diff()\text{diff}() 值。

4
100 -30 -20 50
150
5
12 7 4 32 9
46
6
-5 10 -5 45 -20 15
70

提示

样例 #2 解释

最大可能的 diff()\text{diff}() 值为 4646,可通过分组方式 G1..5={1,1,1,1,2}G_{1..5} = \{1, 1, 1, 1, 2\} 获得。唯一一对相邻组编号的 diff()\text{diff}() 值为:diff(1,2)=46\text{diff}(1, 2) = 46

样例 #3 解释

最大可能的 diff()\text{diff}() 值为 7070,可通过分组方式 G1..6={1,2,2,2,3,4}G_{1..6} = \{1, 2, 2, 2, 3, 4\} 获得。任意两对相邻组编号的 diff()\text{diff}() 值分别为:diff(1,2)=55\text{diff}(1, 2) = 55diff(2,3)=70\text{diff}(2, 3) = 70diff(3,4)=35\text{diff}(3, 4) = 35

翻译由 DeepSeek 完成