P17431 [LBA-OI R5 A] 紫金断局
题目背景
二十载紫金征途,每一分都是淬火的回响。
题目描述
科比有 $n$ 场比赛记录,按时间顺序排列。第 $i$ 场得分为 $a_i$,且每场得分为正。他要将这些比赛分成至多 $k$ 段连续的时期,每段至少包含一场比赛。设最终分成 $t$ 段,第 $i$ 段的总得分为 $S_i$。
球迷写下 $m$ 条“曼巴法则”。每条法则给出三个整数 $x,y,p$:
- 若 $p=0$,第 $x$ 段总分必须小于第 $y$ 段总分;
- 若 $p=1$,第 $x$ 段总分必须大于第 $y$ 段总分。
若某条法则提到的 $x$ 或 $y$ 大于实际段数 $t$,该法则自动无效;否则必须满足。
一段时期的统治力是该段总得分的平方。求所有合法划分中,各段统治力之和的最大值。若不存在合法划分,输出 $-1$。
输入格式
第一行三个整数 $n, k, m$。
第二行 $n$ 个整数,第 $i$ 个整数表示第 $i$ 场比赛的得分 $a_i$。
接下来 $m$ 行,每行三个整数 $x, y, p$,其中 $p \in \{0, 1\}$:
- 若 $p = 0$,则法则为第 $x$ 时期的总得分 **小于** 第 $y$ 时期的总得分(即 $S_x < S_y$);
- 若 $p = 1$,则法则为第 $x$ 时期的总得分 **大于** 第 $y$ 时期的总得分(即 $S_x > S_y$)。
输出格式
一行一个整数,表示最大统治力总和。若无解,输出 `-1`。
说明/提示
对于 $100\%$ 的数据,$1\le n,k\le 5\times 10^5$,$0\le m\le 5\times 10^5$,$0< a_i\le 10^9$。
::cute-table{tuack}
| 子任务编号 | $n$ | $k$ | $m$ | $a_i$ | 分值 |
|:-:|:-:|:-:|:-:|:-:|:-:|
| $1$ | $\le 15$ | $\le 15$ | $\le 15$ | $\le 10^6$ | $25$ |
| $2$ | 无特殊限制 | 无特殊限制 | $=0$ | 无特殊限制 | $25$ |
| $3$ | ^ | $=1$ | 无特殊限制 | ^ | $25$ |
| $4$ | ^ | 无特殊限制 | ^ | ^ | $25$ |
**温馨提示:请注意答案的数量级。在 C++ 中可以使用 `__int128` 类型存储和运算 $2^{127}-1$ 级别的数字。你可以在主函数前加上以下内容来读入和输出 `__int128` 类型的变量:**
```cpp
__int128 in()
{
__int128 k=0,f=1;char c=getchar();
while(c'9'){if(c=='-')f=-1;c=getchar();}
while(c>='0'&&c