hdu 4193 Non-negative Partial Sums 单调队列
2014-04-16 16:56
435 查看
先复制一遍数组,在用一个数组sum[ i ]表示前 i 个数字的和,对于以第k个数开头的情况,只需找出sum[ k ]到sum[ k+n ]的最小值min,如果min - sum[ k-1 ]大于0则满足。
#include <stdio.h> #define maxn 2001000 int a[maxn],sum[maxn]; int q[2*maxn]; int n; int front,rear; void in(int i) { while(front<=rear&&sum[q[rear]]>=sum[i]) rear--; q[++rear]=i; } int out(int i) { if(q[front]==i-n) front++; return q[front]; } int main() { int i; while(1) { int ans=0; scanf("%d",&n); if(n==0) break; a[0]=0; sum[0]=0; for(i=1;i<=n;i++) { scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i]; } for(i=n+1;i<=2*n;i++) { a[i]=a[i-n]; sum[i]=sum[i-1]+a[i]; } front=0;rear=-1; for(i=1;i<n;i++) in(i); for(i=n;i<2*n;i++) { in(i); int u=out(i); if((sum[u]-sum[i-n])>=0) ans++; } printf("%d\n",ans); } return 0; }
相关文章推荐
- 细说Ruby里的public、protected和private
- wergesr
- 新浪微博数据库是怎么设计的
- 初入社会
- ps 命令使用总结
- 黑马程序员—7k月薪面试题之交通灯管理系统
- 35岁迟不迟
- oracle的连接数
- 百度编辑器ueditor(v1.3.6)net环境中详细配置教程附bug解决方法
- java中Writer的线程安全性
- 线段树 (成段更新)
- STM32 时钟 系统时钟 配置 与 时钟树解析
- mysql 删除行 删除列 清空表(delete\truncate\ alter drop )
- oracle实用工具:oradebug
- USTC 1280 / 携程决赛1004 最短路径的代价
- USTC 1280 / 携程决赛1004 最短路径的代价
- win7开机启动到欢迎界面时显示uxtheme.dll丢失怎么办
- Java基础:IO 流中的 flush
- 一个fork的面试题
- ASP.NET 缓存:方法和最佳实践