【做题记录】P2717 寒假作业

  • \(\text{P2717}\) 寒假作业

    • 算法:cdq 分治

题目:

给定一个长度为 \(n\) 的正整数序列 \(\{a_i\}\),求出有多少个连续子序列的平均值不小于 \(k\)

\(1\le n\le 10^5,1\le k,a_i\le 10^4\)

题解:

原式即为

\[ans = \sum_{1\le l\le r\le n} [\sum_{i=l}^r a_i \ge k \times (r-l+1)] \]

考虑将每个 \(a_i\) 减去 \(k\),那么原式变为

\[ans = \sum_{1\le l\le r\le n} [\sum_{i=l}^r(a_i-k) \ge 0]\]

也就是也就是区间和 \(\ge 0\) 的区间数量。

考虑求前缀和 \(s_i=s_{i-1}+a_i\),那么对于一个区间 \([l,r]\) 就等价于 \(s_j-s_i\)

考虑到 \(ans=\sum \limits_{1\le i<j\le n}[s_j-s_i]\),那么这是一个显然的二维偏序。(两维分别是 \(i<j;s_i<s_j\)

posted @ 2022-01-17 18:33  trsins  阅读(45)  评论(0)    收藏  举报