AtCoder Beginner Contest 379

Contest Link

C

妙妙贪心题,居然需要高斯求和公式。

Submission

D

妙妙套路题,维护全局 lazytag,easy to solve.

Submission

E

妙妙拆贡献题,推一下公式:

\[\begin{aligned} \sum_{l = 1}^{n} \sum_{r = l}^{n} f(l, r) &= \sum_{l = 1}^{n} \sum_{r = l}^{n} \sum_{i = l}^{r} 10^{r - i} a_i \\ &= \sum_{i = 1}^{n} a_i \sum_{l = 1}^{i} \sum_{r = i}^{n} 10^{r - i} \\ &= \sum_{i = 1}^{n} i a_i \sum_{r = i}^{n} 10^{r - i} \\ &= \sum_{i = 1}^{n} i a_i (10^0 + 10^1 + 10^2 + \dots + 10^{n - i}) \\ \end{aligned} \]

也就是说, \(a_i\) 的贡献就是给答案的第 \(0, 1, \dots, n - i\) 位都加上一个 \(i a_i\)

Prob could be solved in \(O(n)\)

Submission

F

状压,正解是轮廓线 DP。

妙妙 DS 题。

单调栈 + 树状数组。

找到每个数左边第一个大于它的数,记为 \(L_i\)。我们可以这样来约束能被看到的建筑物:

  • 位于 \([l, r]\) 右边
  • 满足题目中的限制,只对于 \(l\)

为什么限制只剩下 \(l\) 了呢?因为 \(l\) 能看到的 \(r\) 都能看到,\(l\) 看到某个建筑物 \(i\) 的条件是 \((l, i)\) 中没有 \(h \gt h_i\),也就是 \(i\) 左边第一个大于 \(i\) 的数必须不超过 \(l\)

离线下询问,把询问挂在右端点上,倒序枚举 \(r\),用树状数组维护前文所述 \(L_i\) 的限制,查询用前缀和。

Submission

G

posted @ 2024-11-17 11:55  revkiru  阅读(2)  评论(0编辑  收藏  举报