题目大意: 给定一个长度为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(单调队列)的更多相关文章

  1. hdu 4193 Non-negative Partial Sums 单调队列。

    Non-negative Partial Sums Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  2. hdu 3706 Second My Problem First 单调队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...

  3. 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 ...

  4. hdu 4122 Alice's mooncake shop(单调队列)

    题目链接:hdu 4122 Alice's mooncake shop 题意: 有n个订单和可以在m小时内制作月饼 接下来是n个订单的信息:需要在mon月,d日,year年,h小时交付订单r个月饼 接 ...

  5. hdu 3415 Max Sum of Max-K-sub-sequence(单调队列)

    题目链接:hdu 3415 Max Sum of Max-K-sub-sequence 题意: 给你一串形成环的数,让你找一段长度不大于k的子段使得和最大. 题解: 我们先把头和尾拼起来,令前i个数的 ...

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

  7. HDU 4123(树的直径+单调队列)

    Bob’s Race Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. 【HDU】3401:Trade【单调队列优化DP】

    Trade Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  9. ACM学习历程—HDU 5289 Assignment(线段树 || RMQ || 单调队列)

    Problem Description Tom owns a company and he is the boss. There are n staffs which are numbered fro ...

  10. HDU 5945 Fxx and game (DP+单调队列)

    题意:给定一个 x, k, t,你有两种操作,一种是 x - i (0 <= i <= t),另一种是 x / k  (x % k == 0).问你把x变成1需要的最少操作. 析:这肯定是 ...

随机推荐

  1. spring事务管理源码解析--加了@Transactional注解后Spring究竟为我们做了哪些事情?

    大家都知道事务管理是基于AOP的,对AOP还不了解的请自行百度. 实现一个事务需要以下几步:1.获取数据库连接  2.执行数据库操作  3.如果2步骤发生异常就回滚,否则就提交  4.释放资源. 然后 ...

  2. Git使用笔记三

    场景:开源社区提交代码每个人每一个MR只有两个commits,一个是merge前的,一个是merge时候的.因为他们不过是把自己在同一个PR上面提交的commits全部压缩成了一个而已.这个在git上 ...

  3. css3 animation steps制作饿了么loading

    html代码 <!DOCTYPE html> <html> <head> <title></title> </head> < ...

  4. Xcode, does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE) 解决办法

    在Build Settings中找到Enable Bitcode项,设置为如下: 参考:http://blog.csdn.net/soindy/article/details/48519363

  5. Atitit.php opcode虚拟机指令集 分类以及详细解释

    Atitit.php opcode虚拟机指令集 分类以及详细解释 1. 指令集常用分类:: Mov移动指令 算数逻辑移位指令 跳转指令 Oo指令 类型转换指令 2. 与jvm  clr指令集合对比 P ...

  6. Java平台调用.net开发的WebService报错处理

    1.报错:服务器未能识别 HTTP 头 SOAPAction 的值 : 解决办法:.net 开发的WebService文件中(.asmx)增加属性: [SoapDocumentService(Rout ...

  7. wxPython 4.0.0b2安装

    https://www.cnblogs.com/NanShan2016/p/5518235.html 亮的界面是一个GUI程序必不可少的一部分,wxPython可以做到这一点,加之Python强大的功 ...

  8. 关于angularjs在IE里的坑——F12工具打开,功能正常,关闭之后,angularjs not working

    前端时间在做项目的时候,用到了angularjs,期间,发现了一个奇葩的问题,就是在IE11浏览器下,点击下方图1上箭头所示的位置,将此处的开关变为图2中箭头所示的样子,但是发觉没有反应,开关还是灰色 ...

  9. 服务器中很多的CLOSE_WAIT

    服务器中很多的CLOSE_WAIT,请教各位大虾!!!!!!!!!最近遇到一个问题,工程在LINUX服务器上面跑起来了以后,运行一段时间 就有很多的CLOSE_WAIT链接,多了之后,网站就访问不了了 ...

  10. spring boot 打包报错

    [ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.3.0.RELEASE:repac ...