hdu 4193 Non-negative Partial Sums 单调队列
来源:互联网 发布:如何成为算法工程师 编辑:程序博客网 时间:2024/04/28 12:39
先复制一遍数组,在用一个数组sum[ i ]表示前 i 个数字的和,对于以第k个数开头的情况,只需找出sum[ k ]到sum[ k+n ]的最小值min,如果min - sum[ k-1 ]大于0则满足。
#include <stdio.h>#define maxn 2001000int 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;}
0 0
- hdu Non-negative Partial Sums(单调队列)
- HDU 4193 Non-negative Partial Sums(单调队列)
- HDU OJ 4193 Non-negative Partial Sums 【单调队列】
- HDU-4193 Non-negative Partial Sums 单调队列
- 单调队列-hdu-4193-Non-negative Partial Sums
- 单调队列—— HDU 4193 Non-negative Partial Sums
- 【单调队列】hdu 4193 Non-negative Partial Sums
- hdu 4193 Non-negative Partial Sums 单调队列
- HDU 4193 Non-negative Partial Sums(单调队列)
- HDU 4193 Non-negative Partial Sums【单调队列】
- HDU 4193 Non-negative Partial Sums 【单调队列】
- HDU 1193 Non-negative Partial Sums / 单调队列
- HDU Non-negative Partial Sums (单调队列)
- Hdu4193 Non-negative Partial Sums (单调队列)
- Non-negative Partial Sums 单调队列
- 【HDU4193】Non-negative Partial Sums-单调队列
- HDOJ-4193-Non-negative Partial Sums【单调队列】
- HDU 4193 Non-negative Partial Sums(想法题,单调队列)
- ios 防止按钮快速点击造成多次响应的避免方法。
- 线段树 (成段更新)
- 国科大喜招农村学生 称富二代难忍枯燥科研
- ASP.NET 缓存:方法和最佳实践
- STM32 时钟 系统时钟 配置 与 时钟树解析
- hdu 4193 Non-negative Partial Sums 单调队列
- 用SELECT 创建记录和表
- 一个fork的面试题
- 细说Ruby里的public、protected和private
- COM_考试环境Oracle Linux5.4安装
- oracle的连接数
- oracle实用工具:oradebug
- C/C++程序员基础:Linux C高级编程基本知识点
- 新浪微博数据库是怎么设计的