「杂题乱刷2」AT_abc140_e
哎哎,太毒瘤,哎哎,太深刻。
题目链接
AT_abc140_e [ABC140E] Second Sum
解题思路
考虑有以下基本性质:
在 \(1 \sim n\) 的数列上,包含 \(i (1 \le i \le n)\) 点的区间(端点为整数)个数为 \(i \times (n - i + 1)\) 个。
因此此题我们可以使用拆贡献来计算。
具体的,设 \(maxl\) 表示 \(a_i\) 左边的第一个比 \(a_i\) 大的数字编号,\(maxll\) 表示 \(a_{maxl}\) 左边的第一个比 \(a_{maxl}\) 大的数字编号,\(maxr\) 表示 \(a_i\) 右边的第一个比 \(a_i\) 大的数字编号,\(maxrr\) 表示 \(a_{maxr}\) 右边的第一个比 \(a_{maxr}\) 大的数字编号,
以上定义均有若没有这样的数字则编号为 \(-1\) 的性质。
然后有以下分讨:
-
若 \(maxl = maxr = -1\),则方案数为 \(0\)。
-
若 \(maxl = maxrr = -1, maxr \neq -1\),则方案数为 \((n-maxr+1) \times i\)。
-
若 \(maxl = -1, maxrr \neq -1\),则方案数为 \((maxrr-maxr) \times i\)。
-
若 \(maxr = maxll = -1, maxl \neq -1\),则方案数为 \((n-i+1) \times maxl\)。
-
若 \(maxr = -1, maxll \neq -1\),则方案数为 \((n-i+1) \times (maxl-maxll)\)。
-
若 \(maxll = maxrr = -1, maxl \neq -1, maxr \neq -1\),则方案数为 \(maxl \times (maxr-i)+(n-maxr+1) \times (i-maxl)\)。
-
若 \(maxll = -1, maxrr \neq -1, maxl \neq -1\),则方案数为 \(maxl \times (maxr-i) + (maxrr-maxr) \times (i-maxl)\)。
-
若 \(maxrr = -1, maxll \neq -1, maxr \neq -1\),则方案数为 \((n-maxr+1) \times (i-maxl) + (maxl-maxll) \times (maxr-i)\)。
-
若 \(maxrr \neq -1, maxll \neq -1\),则方案数为 \((maxl-maxll) \times (maxr-i) + (maxrr-maxr) \times (i-maxl)\)。
然后这题就做完了,有一车细节,为啥只评绿啊?
参考代码
代码太长了,所以贴个提交记录。