[Luogu]P2344 [USACO11FEB]Generic Cow Protests G

\(Link\)

Description

\(Farmer John\)\(N\) 头奶牛 \(\left(1 \leq N \leq 10^{5}\right)\) 排成一列,正在进行一场抗议活动。第 \(i\) 头奶牛的理智度为 \(a_{i}\left(-10^{4} \leq a_{i} \leq 10^{4}\right)\)。他打算将所有的奶牛隔离成若干个小组,每个小组内的奶牛的理智度总和都要不小于\(0\)。一个小组内的奶牛位置必须是连续的。求满足条件的分组方案有多少种。\(\pmod{10^9+9}\)

Solution

首先很容易可以写出\(dp\)方程:\(dp[i]=\sum\limits_{j=1}^{i-1}dp[j](s[i]\ge{s[j]}),dp[0]=1\)

但是这样做是\(O(n^2)\)的。考虑如何优化。

注意到要满足两个条件(\(j\le{i-1}\)\(s_j\le{s_i}\)),其实就是一个二维数点。而\(i,j\)是天然有序的,我们可以在求出前缀和\(s_i\)后,先离散化一下,作为树状数组下标,再把\(dp_i\)依次加到树状数组里,算出答案就可以了。

posted @ 2020-10-22 10:54  andysj  阅读(52)  评论(0编辑  收藏  举报