单调队列
ssl_yty
这个作者很懒,什么都没留下…
展开
-
【洛谷 P3957】【NOIP 2017 普及组】【单调队列】跳房子
【洛谷 P3957】【NOIP 2017 普及组】【单调队列】跳房子题目解题思路呜呜呜,推了好久,还是错的,研究了题解才会先特判是否可以到达这个分数 虽然没有这个点。。。分析一下题目发现,能走的距离范围为max(d-g,1)~d+g如果用ans个金币可以满足,那么>ans个金币肯定也可以想到用二分节约时间单调队列维护能走的区间中获得的分数最大值先找是否需要至少max(d-g,1)步,然后踢出在堆尾且贡献小的,加入当前位接着踢出需要d+g步以上到达的,不符合范围,踢出更新获得原创 2022-01-20 16:31:16 · 299 阅读 · 1 评论 -
【51nod】【单调队列】连续子段的差异
【51nod】【单调队列】连续子段的差异题目解题思路因为区间的最大差异不超过m所以用单调队列维护区间最大值和最小值如果差值超出规定差异,将位置较小的退队,左边界为ta+1,右边界为当前位置用一个数组将所有区间存储下来,区间中的子段个数为n*(n+1)(n为区间长度),将所有累加起来,再减去重叠的部分代码#include<iostream>#include<cstdio>using namespace std;struct lzf{ int l,r;}b原创 2022-01-17 09:52:55 · 272 阅读 · 0 评论 -
【poj 1821】【单调队列】Fance
【poj 1821】【单调队列】Fance题目poj 1821解题思路设f[i][j]为第i个人刷到第j块木板(中间可以有不刷的)f[i][j]的初值是 max(f[i-1][j],f[i][j-1])推导式是 max(f[i][j],f[i-1][k]+p[i]*(j-k)) (k在j前面,表示k+1~j是i刷的)将式子展开 f[i-1][k]+p[i]*j-p[i]*k可以发现p[i]*j是确定的,可以用单调队列维护 f[i-1][k]-p[i]*k然后再更新答案代码#inc原创 2022-01-17 09:20:27 · 148 阅读 · 0 评论 -
【ssl 2570】 【树形DP】 【单调队列】 幸福的道路
【ssl 2570】 【树形DP】 【单调队列】 幸福的道路题目解题思路我没过。。。从2020到2022的悲剧,有人看出来的话踢踢我先用树形DP求出以每个点为起点的最长路径因为最大差值不能超过m用单调队列维护区间最小值和最大值如果超过了,就将日期早的往后代码#include<iostream>#include<cstdio>using namespace std;struct lzf{ int to,q,nxt;}f[2000010];struct原创 2022-01-13 20:28:24 · 885 阅读 · 0 评论 -
【洛谷 P1638】 【单调队列】 逛画展
【洛谷 P1638】 【单调队列】 逛画展题目解题思路先求出最前面囊括所有画的位置然后如果左边界的画不止存在一次,左边界右移不断扩展右边界,求取答案代码#include<iostream>#include<cstdio>using namespace std; int n,m,se,l,r=1000010,a[1001000],p[2100],q[1000100],h=1,t;int main(){ scanf("%d%d",&n,&m原创 2022-01-13 20:19:20 · 435 阅读 · 0 评论 -
【洛谷 P1714】【单调队列】 切蛋糕
【洛谷 P1714】【单调队列】 切蛋糕题目解题思路枚举i和j,用sum[j]-sum[i](sum是前缀和)但是n2会超时题意是求不定长的最大子序列那么减去的sum[i]最小就是最优用单调队列维护最小值代码#include<iostream>#include<cstdio>using namespace std;int n,m,h=1,ans,t,a[500010],q[500010];int main(){ scanf("%d%d",&原创 2022-01-13 08:07:38 · 181 阅读 · 0 评论 -
【ybtoj 高效进阶 5.6】 【单调队列】 耗费体力
【ybtoj 高效进阶 5.6】 【单调队列】 耗费体力题目解题思路两种情况从高的跳到矮的不耗费体力而从矮的跳到高的耗费1点体力用单调队列维护耗费的体力如果耗费的体力一样后面的树反而高,就舍掉前面的代码#include<iostream>#include<cstdio>using namespace std;int n,m,x,a[1000010],f[1000010],q[1000010];int main(){ scanf("%d",&原创 2022-01-11 21:07:21 · 157 阅读 · 0 评论 -
【ybtoj 高效进阶 5.6】 【单调队列】 粉刷木板
【ybtoj 高效进阶 5.6】 【单调队列】 粉刷木板题目解题思路设f[i][j]为前i个工匠刷到第j块板那么第i个工匠可以什么都不干 f[i][j]=f[i-1][j]或者不刷第j块 f[i][j]=f[i][j-1]要不刷了一段[k+1,j]的区间 f[i][j]=max(f[i][j],f[i][k]+p[i]*(j-k))很开心得发现TLE 啧把式子化开得 f[i][j]=max(f[i][j],f[i][k]+p[i]*j-p[i]*k)得出p[i]*j是固定的,求f[i原创 2022-01-11 20:08:07 · 155 阅读 · 0 评论 -
HDU 3401 Trade 题解
HDU 3401 Trade 题解HDU 3401题目Recently, lxhgww is addicted to stock, he finds some regular patterns after a few days’ study.He forecasts the next T days’ stock market. On the i’th day, you can buy one stock with the price APi or sell one stock to get BPi.原创 2020-08-13 09:27:46 · 202 阅读 · 0 评论 -
HDU 3530 Subsequence 题解
HDU 3530 Subsequence 题解HDU 3530题目ThereThereThere isisis aaa sequencesequencesequence ofofof integersintegersintegers. YourYourYour tasktasktask isisis tototo findfindfind thethethe longestlongestlongest subsequencesubsequencesubsequence thatthatthat sa原创 2020-08-12 19:00:24 · 135 阅读 · 0 评论 -
数数 题解
数数 题解数数解题思路和假期很像没有最短的条件代码#include<iostream>#include<cstdio>#include<cmath>using namespace std;long long n,x,y,h=1,t,ans=-2147483647,a[100020],q[100020],s[100020];int main(){ scanf("%lld%lld",&n,&x); for (int i=1;原创 2020-08-11 14:18:44 · 170 阅读 · 0 评论 -
HDU 2191 512大地震 (多重背包) 题解
HDU 2191 512大地震 (多重背包) 题解HDU 2191题目急!灾区的食物依然短缺!为了挽救灾区同胞的生命,心系灾区同胞的你准备自己采购一些粮食支援灾区,现在假设你一共有资金nnn元,而市场有mmm种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。请问:你用有限的资金最多能采购多少公斤粮食呢?后记:人生是一个充满了变数的生命过程,天灾、人祸、病痛是我们生命历程中不可预知的威胁。月有阴晴圆缺,人有旦夕祸福,未来对于我们而言是一个未知数。那么,我们要做的就应该是珍惜现在,感恩原创 2020-08-11 10:54:21 · 284 阅读 · 0 评论 -
假期 题解
假期 题解假期题目经过几个月辛勤的工作,FJ决定让奶牛放假。假期可以在1…N天内任意选择一段(需要连续),每一天都有一个享受指数W。但是奶牛的要求非常苛刻,假期不能短于P天,否则奶牛不能得到足够的休息;假期也不能超过Q天,否则奶牛会玩的腻烦。FJ想知道奶牛们能获得的最大享受指数。输入第一行:N,P,Q.第二行:N个数字,中间用一个空格隔开,每个数都在longint范围内。输出一个整数,奶牛们能获得的最大享受指数。样例input5 2 4-9 -4 -3 8 -6output原创 2020-08-11 10:35:50 · 527 阅读 · 0 评论 -
洛谷 P1725 琪露诺 题解
琪露诺 题解洛谷 P1725题目在幻想乡,琪露诺是以笨蛋闻名的冰之妖精。某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来。但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸。于是琪露诺决定到河岸去追青蛙。小河可以看作一列格子依次编号为0到NNN,琪露诺只能从编号小的格子移动到编号大的格子。而且琪露诺按照一种特殊的方式进行移动,当她在格子i时,她只移动到区间[iii+lll,iii+rrr]中的任意一格。你问为什么她这么移动,这还不简单,因为她是笨蛋啊。每一个格子都有一个冰原创 2020-08-11 10:24:29 · 670 阅读 · 0 评论 -
烽火传递 题解
烽火传递 题解烽火传递题目烽火台又称烽燧,是重要的军事防御设施,一般建在险要或交通要道上。一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息;夜晚燃烧干柴,以火光传递军情,在某两座城市之间有 nnn 个烽火台,每个烽火台发出信号都有一定代价。为了使情报准确地传递,在连续 mmm 个烽火台中至少要有一个发出信号。请计算总共最少花费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准确传递。输入第一行:两个整数 NNN,MMM。其中NNN表示烽火台的个数, MMM 表示在连续 mmm 个烽火台中至少原创 2020-08-10 13:43:44 · 1367 阅读 · 0 评论 -
洛谷 P1886 滑动窗口 (单调队列) 题解
滑动窗口 (单调队列) 题解洛谷 P1886题目有一个长为 nnn 的序列 aaa,以及一个大小为 kkk 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。例如:TheTheThe arrayarrayarray isisis [1,3,−1,−3,5,3,6,7], andandand kkk=3。输入输入一共有两行,第一行有两个正整数 nnn,kkk。 第二行 nnn 个整数,表示序列 aaa输出输出共两行,第一行为每次窗口滑动的最小值原创 2020-08-10 13:23:06 · 219 阅读 · 0 评论