Description

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

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

Solution

容易想到设\(F[i]\)表示 到第头\(i\)奶牛的方案数,

那么就有\(F[i]=\sum F[j](sum[i]-sum[j] \geq 0)\), sum为前缀和,

但如果直接枚举时间大概为\(O(n^2)\),显然会超时,那么考虑优化

式子可化为\(F[i]=\sum F[j](sum[i]\geq sum[j])\) ,

可以用前缀和为下标,构造树状数组维护小于等于\(sum[i]\)的\(F\) 的和

那么前缀和很大,但是中间有很多没用的,离散化即可

注意\(F[0]=1\)要提前预处理进树状数组,时间复杂度\(O(nlogn)\)

Code

#include <cstdio>
#include <algorithm>
#define LL long long
#define N 1000010
using namespace std; struct info {
int id;
LL sum;
} a[N];
const int yh = 1e9 + 9;
int n, t, p[N];
LL Ans, f[N]; int lowbit(int x) {
return x & (-x);
} inline int read() {
int x = 0, f = 1; char ch = getchar();
while (ch < '0' || ch > '9') {if (ch == '-')f = -1; ch = getchar();}
while (ch >= '0' && ch <= '9') {x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
} bool cmp(info a, info b) {return a.sum < b.sum;} void add(int x, LL v) {
while (x <= n) {
f[x] = (f[x] + v) % yh;
x += lowbit(x);
}
} LL cal(int x) {
LL r = 0;
while (x) {
r = (r + f[x]) % yh;
x -= lowbit(x);
}
return r;
} int main() {
n = read();
for (int i = 1; i <= n; ++i) {
a[i].sum = a[i - 1].sum + read();
a[i].id = i;
}
a[n + 1].id = n + 1; //F[0]=1
a[n + 1].sum = 0;
sort(a + 1, a + n + 2, cmp);
for (int i = 1; i <= n + 1; i++) { //离散化
if (i == 1 || a[i].sum != a[i - 1].sum) ++t;
p[a[i].id] = t;
}
add(p[n + 1], 1);
for (int i = 1; i <= n; ++i) {
Ans = cal(p[i]);
add(p[i], Ans);
}
printf("%lld\n", Ans);
return 0;
}

[USACO]奶牛抗议(DP+树状数组+离散化)的更多相关文章

  1. 奶牛抗议 DP 树状数组

    奶牛抗议 DP 树状数组 USACO的题太猛了 容易想到\(DP\),设\(f[i]\)表示为在第\(i\)位时方案数,转移方程: \[ f[i]=\sum f[j]\;(j< i,sum[i] ...

  2. HDU 2227 Find the nondecreasing subsequences (DP+树状数组+离散化)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2227 Find the nondecreasing subsequences             ...

  3. bzoj 1669: [Usaco2006 Oct]Hungry Cows饥饿的奶牛【dp+树状数组+hash】

    最长上升子序列.虽然数据可以直接n方但是另写了个nlogn的 转移:f[i]=max(f[j]+1)(a[j]<a[i]) O(n^2) #include<iostream> #in ...

  4. JZYZOJ 1360 [usaco2011feb]人品问题 DP 树状数组 离散化

    http://172.20.6.3/Problem_Show.asp?id=1360   好想好写   代码 #include<iostream> #include<cstdio&g ...

  5. 树形DP+树状数组 HDU 5877 Weak Pair

    //树形DP+树状数组 HDU 5877 Weak Pair // 思路:用树状数组每次加k/a[i],每个节点ans+=Sum(a[i]) 表示每次加大于等于a[i]的值 // 这道题要离散化 #i ...

  6. 【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 ...

  7. bzoj 1264 [AHOI2006]基因匹配Match(DP+树状数组)

    1264: [AHOI2006]基因匹配Match Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 793  Solved: 503[Submit][S ...

  8. hdu4605 树状数组+离散化+dfs

    Magic Ball Game Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  9. BZOJ_5055_膜法师_树状数组+离散化

    BZOJ_5055_膜法师_树状数组+离散化 Description 在经历过1e9次大型战争后的宇宙中现在还剩下n个完美维度, 现在来自多元宇宙的膜法师,想偷取其中的三个维度为伟大的长者续秒, 显然 ...

随机推荐

  1. Default Bearer, Dedicated Bearer... What exactly is bearer ?

    Default Bearer, Dedicated Bearer... What exactly is bearer ?   While trying to get a better understa ...

  2. mysql对库,表,数据类型的操作以及完整性约束

    一丶对库的操作 求救语法: help create database; 1.创建数据库 CREATE DATABASE 数据库名 charset utf8; 2.数据库的命名规则: 可以由字母.数字. ...

  3. java集合杂谈

    一:java集合框架如下图所示: 大致说明:看上面的框架图,先抓住它的主干,即Collection和Map. 1.Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性.C ...

  4. Windows 10 下使用Git

    事实上,比在Linux下要难很多.不仅仅是因为Linux下CMD功能较弱,还有就是国内的网络环境,至少,我这Github Windows安装时,总是会下载无法完成 Github Desktop 虽然, ...

  5. sql server 索引总结一

    一.存储结构 在SQL Server中,有许多不同的可用排列规则选项. 二进制:按字符的数字表示形式排序(ASCII码中,用数字32表示空格,用68表示字母"D").因为所有内容都 ...

  6. LeetCode Single Number III (xor)

    题意: 给一个数组,其中仅有两个元素是出现1次的,且其他元素均出现2次.求这两个特殊的元素? 思路: 跟查找单个特殊的那道题是差不多的,只是这次出现了两个特殊的.将数组扫一遍求全部元素的异或和 x,结 ...

  7. pta 编程题13 File Transfer

    其它pta数据结构编程题请参见:pta 这道题考察的是union-find并查集. 开始把数组中每个元素初始化为-1,代表没有父节点.为了使树更加平衡,可以让每一个连通分量的树根的负值代表这个连通分量 ...

  8. vs2010 opencv2.4.10 配置过程出现的问题 & mfc打开图片

    配置参考网址: http://blog.csdn.net/zy122121cs/article/details/49180541 无法启动程序,系统找不到指定的文件:原因是程序编译有错误(不是路径之类 ...

  9. leetcode--3

    1. 题目: Longest Substring Without Repeating Characters Given a string, find the length of the longest ...

  10. IOS Modal(切换另外控件器方式)

    ● 除了push之外,还有另外一种控制器的切换方式,那就是Modal ● 任何控制器都能通过Modal的形式展示出来 ● Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为止 ...