博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P2344 奶牛抗议
阅读量:5279 次
发布时间:2019-06-14

本文共 2049 字,大约阅读时间需要 6 分钟。

P2344 奶牛抗议

题目背景

Generic Cow Protests, 2011 Feb

题目描述

约翰家的N 头奶牛正在排队游行抗议。一些奶牛情绪激动,约翰测算下来,排在第i 位的奶牛的理智度为Ai,数字可正可负。

约翰希望奶牛在抗议时保持理性,为此,他打算将这条队伍分割成几个小组,每个抗议小组的理智度之和必须大于或等于零。奶牛的队伍已经固定了前后顺序,所以不能交换它们的位置,所以分在一个小组里的奶牛必须是连续位置的。除此之外,分组多少组,每组分多少奶牛,都没有限制。

约翰想知道有多少种分组的方案,由于答案可能很大,只要输出答案除以1000000009 的余数即可。

输入输出格式

输入格式:

 

• 第一行:单个整数N,1 ≤ N ≤ 100000

• 第二行到第N + 1 行:第i + 1 行有一个整数Ai,−10^5 ≤ Ai ≤ 10^5

 

输出格式:

 

单个整数:表示分组方案数模1000000009 的余数

 

输入输出样例

输入样例#1:
423-31
输出样例#1:
4

说明

解释:如果分两组,可以把前三头分在一组,或把后三头分在一组;如果分三组,可以把中间两头分在一组,第一和最后一头奶牛自成一组;最后一种分法是把四头奶牛分在同一组里。

 

离散化+树状数组,

f[i] 为到第 i 只奶牛有几种分组

f[i]=f[j](Sum[i]>=Sum[j])

f[i] = 所有的sum[j](s[j]<=sum[i]),将所有小于sum[i]的所有sum[j]加起来,每次需要把f[i]插入到树状数组中,所以树状数组刚好可以维护。

注意I64d与lld的使用。首先将f[0]插入,f[0] = 1;

1 #include
2 #include
3 #define LL long long 4 5 using namespace std; 6 const int MAXN = 100100; 7 const int mod = 1000000009 ; 8 struct Cow{ 9 LL sum;10 int p;11 bool operator < (const Cow &a) const 12 {13 return sum < a.sum;14 }15 }a[MAXN];16 int p[MAXN],n;17 LL sum[MAXN];18 int lowbit(int x)19 {20 return x&(-x);21 }22 void update(int x,LL w)23 {24 while (x<=n)25 {26 sum[x] = (sum[x]+w)%mod;27 x += lowbit(x);28 }29 }30 LL query(int x)31 {32 LL ans = 0;33 while (x)34 {35 ans = (ans+sum[x])%mod;36 x -= lowbit(x);37 }38 return ans;39 }40 int main()41 {42 scanf("%d",&n);43 for (int i=1; i<=n; ++i)44 {45 LL w;46 scanf("%lld",&w);47 a[i].sum = a[i-1].sum + w;48 a[i].p = i;49 }50 a[n+1].sum = 0;51 a[n+1].p = n+1;52 sort(a+1,a+n+2);53 int num = 0;54 for (int i=1; i<=n+1; ++i)55 {56 if (i==1||a[i].sum!=a[i-1].sum) ++num;57 p[a[i].p] = num;58 }59 update(p[n+1],1);60 LL tmp = 0;61 for (int i=1; i<=n; ++i)62 {63 tmp = query(p[i]);64 update(p[i],tmp);65 }66 printf("%lld",tmp);67 return 0;68 }

转载于:https://www.cnblogs.com/mjtcn/p/7099844.html

你可能感兴趣的文章
平台维护流程
查看>>
2012暑期川西旅游之总结
查看>>
12010 解密QQ号(队列)
查看>>
2014年辛星完全解读Javascript第一节
查看>>
装配SpringBean(一)--依赖注入
查看>>
java选择文件时提供图像缩略图[转]
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
python创建进程的两种方式
查看>>
1.2 基础知识——关于猪皮(GP,Generic Practice)
查看>>
迭代器Iterator
查看>>
java易错题----静态方法的调用
查看>>
php建立MySQL数据表
查看>>
最简单的线程同步的例子
查看>>
旅途上看的电影和观后感
查看>>
Ztree异步树加载
查看>>