单调队列优化
yuanxinyu402
这个作者很懒,什么都没留下…
展开
-
POJ 2823 Sliding Window - dp&单调队列优化
题目描述想清楚两件事: 1.当前区间前面的元素没用 2.当前区间有了较小的元素,则以前较大的元素没用,因为当前用不到,以后更用不到。#include<cstdio>#define MAXN 1000000struct node{ int val,pos;}que[MAXN+10];int n,k,a[MAXN+10],mn[MAXN+10],mx[MAXN+10];void read原创 2016-02-03 22:02:36 · 304 阅读 · 0 评论 -
POJ 3250 Bad Hair Day - 单调队列
题目描述分析:题目大意是求出每只cow能看到的cow的总数的和 转换为: 每只cow能被看到的次数总和 这样就可以用单调队列求解了。 对于每只cow,删掉队列中height小于它的值,ans加上此时队列的长度(就是这只cow会被看到的次数)。再插入这只cow的height。如此求解。 注意:ans要用long long (毕竟80000*80000 > INT_MAX)#include<c原创 2016-02-04 13:42:11 · 240 阅读 · 0 评论 -
FZU 1894 志愿者选拔 - 单调队列
题目描述分析:暴力肯定过不了。维护一个从大到小的单调队列。 想清楚这些事: 1. 如果前面有人的val比当前加入队伍的人的val小,那么前面那个人的val永远对答案没有贡献,可以删去。 2. 再有就是要删除出队的人,但由于是按照先入队先出队的顺序来删,可以先把这些人的val保留在单调队列里面,下一次找最大RP_val的时候把这些不合法的删掉即可。 注意:当当前实际队伍里面没有人的时候输出原创 2016-02-04 14:09:53 · 281 阅读 · 0 评论 -
HDU 3415 Max Sum of Max-K-sub-sequence - dp&单调队列优化
题目描述分析:环形要double转换为链状,再跑dp 记dp[i]表示以 i 为结尾的长度不超过k的最大连续子段和 dp[i]=max{sum[i]−sum[j]},i−k<=j<i dp[i] = max \{ { sum[i] - sum[j] \}} , i-k<=j<i 即: dp[i]=sum[i]−min{sum[j]},i−k<=j<i dp[i] = sum[i] - mi原创 2016-02-04 19:17:31 · 297 阅读 · 0 评论