#P14438. [JOISC 2013] 切割蛋糕 / Cake

[JOISC 2013] 切割蛋糕 / Cake

题目描述

JOI 君和 IOI 酱是双胞胎兄妹。JOI 君最近迷上了烘焙,今天他刚烤好一个蛋糕准备享用,但烤好的香味引来了 IOI 酱,于是两人决定平分这个蛋糕。

蛋糕是圆形的。从某一点沿放射状切入,将蛋糕切分成 NN 块,并按逆时针方向为这些块编号 11NN。也就是说,对于 1iN1 \leq i \leq N,第 ii 块与第 i1i-1 块和第 i+1i+1 块相邻(其中视第 00 块为第 NN 块,第 N+1N+1 块为第 11 块)。第 ii 块的大小为 AiA_i,但由于切工十分拙劣,所有 AiA_i 的值均互不相同。

:::align{center} :::

决定将这 NN 块蛋糕分给 JOI 君和 IOI 酱。分配方式如下:

  • 首先由 JOI 君从 NN 块中选择 11 块取走。
  • 随后从 IOI 酱开始,IOI 酱和 JOI 君轮流从剩余蛋糕块中每次取 1 块。但(由于两人不擅长取蛋糕且要避免破坏蛋糕形状)只能取那些至少有一侧相邻蛋糕块已被取走的蛋糕块。当有多块可取的蛋糕块时,选择其中 最大 的一块取走。

JOI 君想知道,对于每一块蛋糕,若他最初选择取走该块,则最终自己获得的所有蛋糕块大小之和是多少。

任务

给定蛋糕块的数量 NN 以及 NN 块蛋糕的大小信息,编写程序计算对于每一块蛋糕,若最初取走该块,则 JOI 君最终获得的蛋糕块大小之和。

输入格式

从标准输入读取以下输入数据:

  • 11 行包含一个整数 NN,表示蛋糕被切分为 NN 块。
  • 后续 NN 行中,第 ii 行(1iN1 \leq i \leq N)包含一个整数 AiA_i,表示第 ii 块蛋糕的大小。

输出格式

向标准输出输出 NN 行。第 ii 行(1iN1 \leq i \leq N)输出一个整数,表示若最初取走第 ii 块蛋糕,则 JOI 君最终获得的蛋糕块大小之和。

5
2
8
1
10
9
13
18
12
13
12

提示

样例 1 解释

此示例对应题目中图示的情况。

例如,假设最初取走第 11 块。此时:

  • 剩余蛋糕块中「至少有一侧相邻蛋糕块已被取走」的是第 22 块和第 55 块,由于第 55 块较大,因此接下来取走第 55 块。
  • 类似地,接下来比较第 22 块和第 44 块,由于第 44 块较大,因此取走第 44 块。
  • 接着比较第 22 块和第 33 块,由于第 22 块较大,因此取走第 22 块。
  • 最后仅剩第 33 块,因此取走第 33 块。

即蛋糕块的取走顺序为:

11 块 (22) → 第 55 块 (99) → 第 44 块 (1010) → 第 22 块 (88) → 第 33 块 (11)

(括号内为蛋糕块大小)

因此 JOI 君取走的蛋糕块为第 114433 块,其大小之和为 1313,故在第 11 行输出 1313。最初取走第 11 块以外的其他块时,也以类似方式计算。

限制

所有输入数据满足以下条件:

  • 2N3000002 \leq N \leq 300\,000
  • 1Ai10000000001 \leq A_i \leq 1\,000\,000\,000 (1iN1 \leq i \leq N)

子任务

子任务 1 [10 分]

  • 满足 N5000N \leq 5000

子任务 2 [90 分]

无额外限制

翻译由 DeepSeek V3 完成