![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单调队列
文章平均质量分 61
shiqi_614
这个作者很懒,什么都没留下…
展开
-
ZOJ 3632 Watermelon Full of Water(单点更新,区间查询)
题意:有n天,每天都可以买西瓜,每个西瓜的价格是ai,每个西瓜能吃bi天。问这n天每天都有西瓜吃的最小的代价是多少?如果你在第i天买了一个西瓜,那么之前买的西瓜就要全部扔掉,才能开始吃新的西瓜。定义dp[i]为到i天为止,每天都有西瓜吃的最小代价,那么状态转移方程就是:dp[i]=min(dp[i],dp[i-k-1]+a[i-k])。这样时间复杂度会达到O(n^2),所以要优化。在递推的过程原创 2012-08-06 11:01:16 · 1565 阅读 · 1 评论 -
UVA 12393 Non-negative Partial Sums
题意:给定一个长n的循环队列(n=0;(0我们把原始序列扩充成2*n个数,如果在长度为n的子序列中,最小的和仍然大于开端的和,那么是满足条件的。用一个单调队列保存在长度为n的子序列中的递增的和。#include #include #include using namespace std;const int N=2000005;int sum[N],que[N];int main原创 2012-08-06 11:43:31 · 1325 阅读 · 0 评论 -
POJ 3162 Walking Race(单调队列或线段树加树型DP)
题意:给你一棵有n个节点的树,树边为权值,要你求出树上每个点到其他点的距离中最大的那个值。对求出的从节点1到节点n最大值,找出最长的一段使得这一段中最大值减最小值的结点小于等于m。对于第一个问题,有两种方法可以解决。第一种比较简单的方法是,每个点到其他点的距离中最大的那个值,一定是到树的直径的两个端点的距离之一(反证法易得)。那么我们找出树的直径的同时,处理出各个节点到树直径两个端点的距离就可原创 2012-10-24 01:13:52 · 2419 阅读 · 0 评论