求出前缀和$s$,设$f[i]=s[i+d-1]-s[i-1]$。 从左到右枚举的右端点$i$,左端点$j$满足单调性,若$s[i]-s[j-1]-\max(区间内最大的f)\leq p$,则可行。 用单调队列维护即可,时间复杂度$O(n)$。
分类:
其他好文 时间:
2016-03-13 06:11:25
阅读次数:
118
题意是给你n个数 组成的环 求以一个数开头 的数列全部前缀都为非负数的数列的个数: 思路: 先扩展成2*n的数列 然后求出sum【i】表示前i项的和 对每一个i>.=n结尾的数列 仅仅要单调队列里的最小值大于等于sum【i-n】就满足情况(想想为什么) 对于单调队列 仅仅要维护长度大于等于n 递增的
分类:
其他好文 时间:
2016-03-02 09:30:58
阅读次数:
119
题目:给你一个n*n的01矩阵,求里面最大的1组成的矩形的米娜及。 分析:dp。单调队列。UVa 1330同题,仅仅是输入格式变了。 我们将问题分解成最大矩形。即求解以k行为底边的图形中的最大矩形。然后合并。求最大的矩形。 预处理: 求出以每行为底边的每一列从底边開始向上的最大连续1的高度MaxH。
分类:
其他好文 时间:
2016-03-01 19:06:47
阅读次数:
136
线性DP,使用单调队列优化。 1 /* 4374 */ 2 #include <iostream> 3 #include <sstream> 4 #include <string> 5 #include <map> 6 #include <queue> 7 #include <set> 8 #inc
分类:
其他好文 时间:
2016-02-20 00:26:36
阅读次数:
176
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2726 倒着做,前面的点对后面的点都是有贡献的。 f[i]=min(f[j]+cost[i]*(T[i]-T[j]+S)) (j>i) 然后。。。。时间可以是负数的。(所以看起来好好的单调队列+斜
分类:
其他好文 时间:
2016-02-13 06:43:56
阅读次数:
241
f[i]=max{f[j]+(i-j-1)*i-(b[i-1]-b[j])+a[i]}b[i]为i的前缀和 易得(f[j]+b[j]-f[k]-b[k])/(j-k)<i 同样单调队列维护凸包 longlong老是没注意,AC率就是这么刷下来的QAQ 1 #include<bits/stdc++.h
分类:
其他好文 时间:
2016-01-30 09:32:00
阅读次数:
174
居然还有奶牛题没被权限(感动QAQ) 如果有包含关系的话就可以去掉小的,所以可以先排完序后去掉逆序的 然后长和宽都是单调的,就可以出方程f[i]=max{f[j]+a[j]b[i]} 易得(f[j-1]-f[k-1])/(a[j]-a[k])<b[i](易项时注意符号问题) 单调队列维护凸包即可 1
分类:
其他好文 时间:
2016-01-30 02:43:28
阅读次数:
208
题目链接单调队列优化枚举起点找出每一种颜色在这个位置之后的第一个位置与这个位置距离的最大值。再找出每一个起点结果的最小值。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 const int inf=21474...
分类:
其他好文 时间:
2016-01-22 17:03:35
阅读次数:
116
横着用单调队列求最值,再竖着做单调队列即可 1 #include 2 #define inc(i,l,r) for(int i=l;i=r;i--) 4 #define link(x) for(edge *j=h[x];j;j=j->next) 5 #define mem(a) memset(a,0...
分类:
其他好文 时间:
2016-01-15 22:58:17
阅读次数:
248
才发现我的第一道BZ是单调队列。。发现云神的资料里面有这个的介绍就来水水。。单调队列由于要去掉队尾就还是用数组好点,而且写起来比STL要好看点 1 //#include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #define ...
分类:
其他好文 时间:
2016-01-14 20:48:06
阅读次数:
156