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需要的最少操作. 析:这肯定是 ...
随机推荐
- 在Window系统中使用Redis缓存策略
Redis是一个用的比较广泛的Key/Value的内存数据库,新浪微博.Github.StackOverflow 等大型应用中都用其作为缓存,Redis的官网为http://redis.io/. 最近 ...
- python操作xml文件
一.什么是xml? xml即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. abc.xml <?xml version="1.0&q ...
- HDU 4421 Bit Magic(2-sat)
HDU 4421 Bit Magic pid=4421" target="_blank" style="">题目链接 题意:就依据题目,给定b数 ...
- 深入研究mysql中group by与order by取分类最新时间内容
鉴于项目的需要,就从网上找到该文章,文章分析得很详细也很易懂,在android里,(不知道是不是现在水平的限制,总之我还没找到在用 ContentProvider时可以使用子查询),主要方法是用SQL ...
- nodejs 命令行交互
人机交互 function readSyncByfs(tips) { tips = tips || '> '; process.stdout.write(tips); process.stdin ...
- unity, write/read txt file
在Assets下新建文件夹StreamingAssets.然后下面代码可在其中生成test.txt文件,并读写: using UnityEngine;using System.Collections; ...
- Linux Ctrl+z bg fg jobs命令使用
一.暂停前台运行时间长的程序 使用Ctrl + z然后可以看到系统提示: []+ Stopped /home/test/demo.sh 二.bg命令 将程序放到后台处理 bg %jobnumber ...
- HDU5374 Tetris (2015年多校比赛第7场)大模拟
思路: 先写好了几个函数.旋转,四种操作,推断能否够进行合并消除 题中有好几处要考虑的细节问题,如 自然下落究竟部时不进行合并的推断,而是当自然下落非法时才推断 假设消除一行,这一行上面的所以方块仅仅 ...
- 美团HD(6)-添加搜索遮罩
DJSelectCityViewController.m /** SearchBar开始编辑 */ - (void)searchBarTextDidBeginEditing:(UISearchBar ...
- AJAX动态加载评论
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...