题意:
给n和k,再给你n个形成环的数
问你连续不超过k个数的最大和是多少
并输出区间,和一样以左端点最小,再一样以长度最小
思路:
我们记录前缀和sum[i]
开一个单调队列维护sum[i-1]的值最小
因为对于到当前位置的和为sum[i]-sum[j] 如果sum[j]越小,那么sum[i]就越大
所以里面维护的就是到当前位置符合要求最小的sun[j]
代码:
#inclu...
分类:
其他好文 时间:
2015-07-27 15:03:50
阅读次数:
113
??
题目大意: 给定一个长度为n的循环序列,从n个不同位置开始,问有几个位置使得一下情况成立:所有前缀的和都大等于0(n
下午的训练赛,之前没学过单调队列所以用的线段树,一直tle,到了结束也没搞出来。晚上回来看了下,可以用单调队列来做,时间复杂度为O(n)。
这道题其实就是看从每个位置开始的最小前缀和是否大于零,但是这是有规律的。
比如从元素1(以下将元素a[i]简写为i)开始的所有...
分类:
其他好文 时间:
2015-07-27 07:10:05
阅读次数:
120
单调队列典型题
An array of size n ≤ 10 6 is given to you. There is a sliding window of size
k which is moving from the very left of the array to the very right. You can only see the
k numbers in the windo...
HDU 4193
题意:给n个数字组成的序列(n
思路:
这题看到数据规模觉得只能用最多O(nlogn)的算法,然后想到了之前刚做过的有关最小表示法的题,但还没证明出一个做这题有效的算法出来。
后来看过题解,发现用的最多的方法是单调队列,然而我对这个知识点知之甚少orz
/*科普君:from单调队列
单调队列是指:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只...
分类:
其他好文 时间:
2015-07-27 00:24:41
阅读次数:
158
题意:一个数列,求分别以每个元素为首位时(循环),前缀和都非负的序列个数
分析:
首先是个循环序列问题,所以要做处理:把序列复制一遍变成2*n的序列,这样任意一个长度为n的区间就是一种序列,共n种
然后求前缀和就可以用sum[j]-sum[i-1],这个式子表示以第i的元素为首位的序列,然后以第j个元素结尾的前缀和。同一个序列的不同结尾的前缀和每次都是减sum[i-1],只有sum[j]不同...
分类:
其他好文 时间:
2015-07-27 00:21:16
阅读次数:
106
从左到右扫一遍, 维护一个单调不递减队列. 然后再从右往左重复一遍然后就可以统计答案了。----------------------------------------------------------------------------#include#define rep(i, n) for(...
分类:
其他好文 时间:
2015-07-26 20:45:47
阅读次数:
161
题意:
给你n个人和一个k
问你把这n个人分成多少个连续的子区间,要求区间每个数两两相差绝对值小于k
思路:
我们仅仅只需要对于当前位置,最左边那个和它绝对值相差大于等于k 的位置在哪
假设对于i这个位置,最左边的位置是tep,不存在的话tep=0
那么当且位置的贡献就是 sum[i]=min(i-tep,sum[i-1]+1);
那么对于这个位置怎么求的话,我是使用了两个单调队列
...
分类:
其他好文 时间:
2015-07-26 15:49:57
阅读次数:
95
// hdu2430 Beans 单调队列
//
// 题目意思:
// 求一个sum%p<=k的max(sum/p)
//
// 结题报告:
// 技巧,先求出前缀和,并记录前i项对p取余的值记为x,并记下位置pos
// 按照先按x从小到大,如果x相同按pos从小到大排序。这样,问题就转换为
// 求一个最小的pos使得pos到i的值最大。
//
//...
分类:
其他好文 时间:
2015-07-25 18:26:18
阅读次数:
126
// hdu3530 Subsequence 单调队列
// 题目大意:找到一个最大的子串,使得子串区间内最大值和最小值的差
// 在low和up范围内,串的规模10w。
// 解题思路:
// 单调队列,单调队列可以保留i位置之前的最大值和最小值的下标,有了这些
// 则,每次我们比较两个队列的队头,看差值是否大于up,(因为它是到i位置最大
// ...
分类:
其他好文 时间:
2015-07-25 16:53:45
阅读次数:
144
这题说的是给了 n个数 然后让你计算出所有区间中那些数的最大值减最小值小于k这样的区间有多少个/* 这样我们给我们在处理过程中的区间做一些处理 我们在处理即将进来的数的时候我们并不知道他是不是我们区间的最小或者最大值 但是我们可以将他们处理一下 用两个队列 一个队列放的逐渐减小的数列 一个放...
分类:
其他好文 时间:
2015-07-25 13:43:46
阅读次数:
138