【做题记录】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\))

浙公网安备 33010602011771号