HDU 4193 Non-negative Partial Sums(单调队列)
题目大意: 给定一个长度为n的循环序列。从n个不同位置開始,问有几个位置使得一下情况成立:全部前缀的和都大等于0(n <=1000000).
下午的训练赛。之前没学过单调队列所以用的线段树,一直tle,到了结束也没搞出来。晚上回来看了下,能够用单调队列来做。时间复杂度为O(n)。
这道题事实上就是看从每一个位置開始的最小前缀和是否大于零。可是这是有规律的。
比方从元素1(下面将元素a[i]简写为i)開始的全部前缀和为1,1+2,...,1+2+3+..+n
从2開始的全部前缀和为2, 2+3 ,....2+3+4+..+n+1
那么当我们算出以1开头的全部前缀的最小值(记为u)时,那么以2开头的全部前缀和的最小值为min(2+1, 2+3+1,...,2+3+4+..+n+1, 2+3+4+..+n+1+1)-1,
也就是说我们每次把sum[n]+sum[i]加入到队列中,求出最小值后减去sum[i]就是以i+1为首的全部前缀和的最小值。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<string>
#include<map>
#include<set>
#define eps 1e-6
#define LL long long
using namespace std; const int maxn = 1000000 + 1000;
const int INF = 0x3f3f3f3f;
int a[1000000+100];
int n;
int su[1000000+100]; int qmin[maxn], vmin[maxn], hmin = 1, tmin = 0;
void Min(int a, int i) { //第i个元素a入队
while(hmin<=tmin && vmin[hmin] <= i-n) hmin++; //超范围队首出队
//while(hmin<=tmin && qmin[tmin]>=a) tmin--; //不符合要求队尾出列
int l = hmin, r = tmin;
while(l <= r) {
int m = l+(r-l)/2;
if(qmin[m] >= a) r = m - 1;
else l = m + 1;
}
tmin = ++r;
qmin[tmin] = a;
vmin[tmin] = i;
} int main() {
//freopen("input.txt", "r", stdin);
while(scanf("%d", &n) == 1 && n) {
hmin = 1, tmin = 0;
for(int i = 1; i <= n; i++) {
scanf("%d", &a[i]);
su[i] = su[i-1] + a[i];
}
int ans = 0;
for(int i = 1; i < n; i++) Min(su[i], i);
for(int i = n; i < 2*n; i++) {
Min(su[n]+su[i-n], i);
if(qmin[hmin]-su[i-n] >= 0) ans++;
}
cout << ans << endl;
}
return 0;
}
HDU 4193 Non-negative Partial Sums(单调队列)的更多相关文章
- hdu 4193 Non-negative Partial Sums 单调队列。
Non-negative Partial Sums Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...
- hdu 3706 Second My Problem First 单调队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...
- HDU 4122 Alice's mooncake shop 单调队列优化dp
Alice's mooncake shop Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem ...
- hdu 4122 Alice's mooncake shop(单调队列)
题目链接:hdu 4122 Alice's mooncake shop 题意: 有n个订单和可以在m小时内制作月饼 接下来是n个订单的信息:需要在mon月,d日,year年,h小时交付订单r个月饼 接 ...
- hdu 3415 Max Sum of Max-K-sub-sequence(单调队列)
题目链接:hdu 3415 Max Sum of Max-K-sub-sequence 题意: 给你一串形成环的数,让你找一段长度不大于k的子段使得和最大. 题解: 我们先把头和尾拼起来,令前i个数的 ...
- HDU 6444 Neko's loop(单调队列)
Neko has a loop of size nn. The loop has a happy value aiai on the i−th(0≤i≤n−1)i−th(0≤i≤n−1) grid. ...
- HDU 4123(树的直径+单调队列)
Bob’s Race Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- 【HDU】3401:Trade【单调队列优化DP】
Trade Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- ACM学习历程—HDU 5289 Assignment(线段树 || RMQ || 单调队列)
Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered fro ...
- HDU 5945 Fxx and game (DP+单调队列)
题意:给定一个 x, k, t,你有两种操作,一种是 x - i (0 <= i <= t),另一种是 x / k (x % k == 0).问你把x变成1需要的最少操作. 析:这肯定是 ...
随机推荐
- Android自定义圆形进度条,完成类似LOFTER效果
1.http://stackoverflow.com/questions/3760381/rotating-image-animation-list-or-animated-rotate-androi ...
- spark-streaming-kafka-0-10源码分析
转发请注明原创地址http://www.cnblogs.com/dongxiao-yang/p/7767621.html 本文所研究的spark-streaming代码版本为2.3.0-SNAPSHO ...
- Cassandra第一次使用
在FreeBSD上安装Cassandra: # pkg install cassandra2找了半天Cassandra的配置文件,原来安装位置是在这: /usr/local/share/cassand ...
- va_list可变参数
可变参数函数实现 va_list,va_start,va_arg,va_end va可变参数意思,variable-argument. 1. 头文件及实现 linux中定义在gcc头文件中,stdar ...
- 【转】在Eclipse中使用JUnit4进行单元测试(初级篇)
http://www.builder.com.cn/2007/0901/482336.shtml 首先,我们来一个傻瓜式速成教程,不要问为什么,Follow Me,先来体验一下单元测试的快感! 首先新 ...
- 学习百度、腾讯及lofter的前端兼容及布局
- 苯(Benzene)
在常温下是甜味.可燃.有致癌毒性的无色透明液体,其密度小于水,但分子质量大于水,并带有强烈的芳香气味.它难溶于水,易溶于有机溶剂,本身也可作为有机溶剂.苯是一种石油化工基本原料,其产量和生产的技术水平 ...
- Eclipse 重启选项
重启 Eclipse 重启选项允许用户重启 Eclipse. 我们可以通过点击 File 菜单选择 Restart 菜单项来重启 Eclipse. 在安装插件后,用户一般都会被提醒要重启 Eclips ...
- android 细节之 AndroidRuntimeException:This message is already in use
今天在做项目处理消息队列的时候.遇到了这样一个问题.一个异常.AndroidRuntimeException:This message is already in use. 我当时的详细业务需求情境为 ...
- SlidingMenu官方实例分析7——SlidingContent和SlidingTitleBar区别
包含ActionBar:setSlidingActionBarEnabled(true); 效果图: 不包含ActionBar:setSlidingActionBarEnabled(false); 效 ...