USACO 奶牛抗议 Generic Cow Protests

Description

约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动。第i头奶牛的理智度 为Ai,Ai可能是负数。约翰希望奶牛在抗议时保持理性,为此,他打算将所有的奶牛隔离成 若干个小组,每个小组内的奶牛的理智度总和都要大于零。由于奶牛是按直线排列的,所以 一个小组内的奶牛位置必须是连续的。

请帮助约翰计算一下,存在多少种不同的分组的方案。由于答案可能很大,只要输出答 案除以1,000,000,009的余数即可。

Input Format

第一行:单个整数:N,1 ≤ N ≤ 10^6

第二行到N + 1行:在第i + 1行有一个整数:Ai,表示第i头奶牛的理智度,−10^5 ≤ Ai ≤ 10^5

Output Format

第一行:单个整数,表示分组方案数除以\(1,000,000,009\)的余数

Sample Input

4

2

3

-3

1

Sample Output

4

Hint

分别是[2 3 − 3 1],[2 3 − 3][1], [2][3 − 3 1],[2][3 − 3] [1]

Solution

本题很容易想到一个\(O(n^2)\)的DP,用\(f[i]\)表示前i个奶牛有几种分组方案,然后枚举\(j\),如果区间\([j+1,i]\)里的奶牛理智和大于零\(f[i]\)就加上\(f[j]\)即:

设\(s[i]\)为前i头奶牛的理智和

\[f[i]=\sum ^{i-1}_{j=0}[s[i]-s[j]>=0]*f[j]
\]

实际上\(f[i]​\)等于所有满足\(j<i,s[j]<=s[i]​\)的\(f[j]​\)的总和。

求解\(f[i]\)时位置编号是有序的顺序处理即可,但\(s​\)却是无序的且值很大无法解决。

可以发现位置编号很小,如果\(s​\)有序而位置编号无序的话可以用树状数组解决。那怎样才能让位置编号无序,\(s​\)有序?按\(s​\)从小到大排序即可。

Code

#include <cstdio>
#include <algorithm>
#define lowbit(x) ((x)&(-x))
#define LL long long inline int read(){
int num=0,k=1;char c=getchar();
while (c<'0'||c>'9'){if (c=='-')k=-1;c=getchar();}
while (c>='0'&&c<='9') num=(num<<1)+(num<<3)+c-48,c=getchar();
return num*k;
} struct info{
LL sum;
int id;
}ox[1000007];
bool cmp(info a,info b){return a.sum<b.sum||(a.sum==b.sum&&a.id<b.id);} const LL mod=1000000009;
LL n,ans,c[1000007],f[1000007]; int main(){
n=read()+1;
for (int i=2;i<=n;++i)
ox[i].sum=read()+ox[i-1].sum,ox[i].id=i;
ox[1].sum=0,ox[1].id=1;f[1]=1;
std::sort(ox+1,ox+n+1,cmp);
for (int i=1;i<=n;++i){
for (int p=ox[i].id;p;p-=lowbit(p))
f[ox[i].id]=(f[ox[i].id]+c[p])%mod;
for (int p=ox[i].id;p<=n;p+=lowbit(p))
c[p]=(c[p]+f[ox[i].id])%mod;
if (ox[i].id==n) break;
}
printf("%lld\n",f[n]);
}

USACO 奶牛抗议 Generic Cow Protests的更多相关文章

  1. 洛谷 2344 奶牛抗议 Generic Cow Protests, 2011 Feb

    [题解] 我们可以轻松想到朴素的状态转移方程,但直接这样做是n^2的.所以我们考虑采用树状数组优化.写法跟求逆序对很相似,即对前缀和离散化之后开一个权值树状数组,每次f[i]+=query(sum[i ...

  2. BZOJ2274: [Usaco2011 Feb]Generic Cow Protests

    2274: [Usaco2011 Feb]Generic Cow Protests Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 196  Solve ...

  3. 洛谷 P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…

    题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. The cow ...

  4. P1569 [USACO11FEB]属牛的抗议Generic Cow Prote…

    题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. The cow ...

  5. [USACO]奶牛抗议(DP+树状数组+离散化)

    Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望奶牛在抗议时保持理性,为此,他打算将所有的奶牛隔离成 若干个小组 ...

  6. [Usaco2011 Feb]Generic Cow Protests

    Description Farmer John's N (1 <= N <= 100,000) cows are lined up in a row and numbered 1..N. ...

  7. 【bzoj2274】[Usaco2011 Feb]Generic Cow Protests dp+树状数组

    题目描述 Farmer John's N (1 <= N <= 100,000) cows are lined up in a row andnumbered 1..N. The cows ...

  8. [USACO11FEB]Generic Cow Protests

    思路: 动态规划.首先处理出这些数的前缀和$a$,$f_i$记录从第$1$位到第$i$位的最大分组数量.DP方程为:$f_i=max(f_i,f_j+1)$,其中$j$满足$a_i-a_j≥0$. # ...

  9. BZOJ 2274 [Usaco2011 Feb]Generic Cow Protests

    [题解] 很容易可以写出朴素DP方程f[i]=sigma f[j] (sum[i]>=sum[j],1<=j<=i).  于是我们用权值树状数组优化即可. #include<c ...

随机推荐

  1. 2、在NET中实现多线程

    1.System.Threading命名空间 System.Threading命名空间提供了使得可以多线程编程的类和接口 其中 (1)Thread类构成了C#多线程编程的支柱,他用于创建并控制线程 ( ...

  2. 在Java中如何设置一个定时任务,在每天的一个时间点自动执行一个特定的程序

    Quartz定时机制 首先导入jar包到程序内 quartz-all-1.6.0.jar 然后创建一个XML TimeConfig.xml 名字可以自己定义 <?xml version=&quo ...

  3. JS中的if语句内如何加or使多个条件通过

    if(a==1&&b==2){ //do something }//条件是a等于1  并且  b等于2时才能成立,两个条件必须同时满足 if(a==1||b==2){ //do som ...

  4. 解决Ajax前台中文传到后台出现中文乱码

    遇到的问题是: 前台利用Ajax, get方式向后台发送中文数据出现乱码. 解决办法是前台两次编码, 后台一次解码即可. 前台jsp文件 1 var text = "张三"; 3 ...

  5. hexo更改主题

    github+hexo搭建好个人博客之后,一般都挑选自己喜欢的主题.在这里为大家介绍一下比如何挑选主题以及如何修改主题. 主题选择: 1:知乎推荐 2:hexo官方 本地目录中打开git bash: ...

  6. js 获取 对象 属性名称(转载)

    来源:https://www.cnblogs.com/YuyuanNo1/p/9257634.html dataObj = {name : su,age : 26,height : 18cm }; f ...

  7. mysql数据库查询缓存总结

    概述 查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果.闲来无事,做一下这块的总结,也做个备忘! 工作原理 查询缓存工作原理如下: 缓存SELECT操作的结果集和S ...

  8. SMBus PEC

    SMBus一种I2C总线的变种 SMBus 提供了PEC方式,提高了传输的可靠性. 总线的发展都是在提高速度,提高可靠性或者提高传输效率上下功夫. PEC不具备纠错的能力,是在I2C link lay ...

  9. Pollard-rho的质因数分解

    思路:见参考文章(原理我是写不粗来了) 代码: 用到了快速幂,米勒罗宾素性检验. #include <iostream> #include <time.h> #include ...

  10. Codeforces B. Too Easy Problems

    题目描述: time limit per test 2 seconds memory limit per test 256 megabytes input standard input output ...