P11359 [eJOI 2023] Team Building

题目描述

你需要集结一个 $N$ 人小队,第 $i$ 个人的能力值为 $s_i$,你可以逐一将每个人加入你的小队。 在你的小队中,每个人拥有两个额外的属性:星语和可爱。加入一个人的过程分三步: - 这个人进入小队,其星语和可爱值均为 $0$。 - 剩余所有人的星语值加上自己的可爱值。 - 剩余所有人的可爱值加上新加入的人的能力值。 最后,你的小队的总星语值定义为所有人的星语值之和,你需要最大化总星语值。 例如,如果你按顺序加入了能力值为 $0,2,2,3$ 的人,所有人的属性变化如下: |行动|星语|可爱| |:-:|:-:|:-:| |加入第一个人|$0$|$0$| |加入第二个人|$0,0$|$0,0$| |更新星语值|$0,0$|$0,0$| |更新可爱值|$0,0$|$\textbf{2},0$| |加入第三个人|$0,0,0$|$2,0,0$| |更新星语值|$\textbf{2},\textbf{0},0$|$2,0,0$| |更新可爱值|$2,0,0$|$\textbf{4},\textbf{2},0$| |加入第四个人|$2,0,0,0$|$4,2,0,0$| |更新星语值|$\textbf{6},\textbf{2},\textbf{0},0$|$4,2,0,0$| |更新可爱值|$6,2,0,0$|$\textbf{7},\textbf{5},\textbf{3},0$| 此时总星语值为 $6+2+0+0=8$,但是将顺序改为 $2,2,3,0$ 就可以得到 $7+3+0+0=10$。 你还需要处理 $Q$ 次修改,每次修改会将第 $x_i$ 个人的能力值改为 $y_i$,你需要求出每次修改后的最大总星语值,修改之间不独立,即每次修改在下一次保留。

输入格式

第一行输入两个整数 $N,Q$。 第二行输入 $N$ 个整数 $s_i$。 接下来 $Q$ 行,每行输入两个整数 $x_i,y_i$。

输出格式

输出 $Q+1$ 行,每行一个整数,代表初始序列和每次修改后的答案。

说明/提示

**【样例解释】** 原始序列的最优方案在题面中已经给出。 第一次修改后的序列为 $(2,4,2,3)$。 第二次修改后的序列为 $(2,4,2,0)$。 **【数据范围】** **本题采用捆绑测试。** - Subtask 1(11 pts):$N\leq 7$,$Q\leq 100$。 - Subtask 2(19 pts):$N,Q\leq 500$。 - Subtask 3(15 pts):$Q\leq 10$。 - Subtask 4(6 pts):$s_i,y_i\leq 1$。 - Subtask 5(9 pts):$s_i,y_i\leq 500$。 - Subtask 6(12 pts):$x_i=1$。 - Subtask 7(10 pts):每次修改和原来的数之差不超过 $1$。 - Subtask 8(18 pts):无特殊限制。 对于 $100\%$ 的数据,保证 $2\leq N\leq 5\times 10^4$,$1\leq Q\leq 10^5$,$0\leq s_i\leq 10^5$,$1\leq x_i\leq N$,$0\leq y_i\leq 10^5$。