![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单调队列
ModestCoder_
一个modest的coder
展开
-
【题解】LuoGu5202:USACO19JAN]Redistricting P
原题传送门 这个是双关键字的单调队列 记HHH为1,GGG为-1,统计前缀和 暴力dpi=min(dpj+(sumi>=sumj))(i−j<=m)dp_i=min(dp_j+(sum_i>=sum_j))(i-j<=m)dpi=min(dpj+(sumi>=sumj))(i−j<=m) 用单调队列维护,如何判断两个数在队列中的先后? 对于两个数p,qp,qp,q dpp!=dpqdp_p!=dp_qdpp!=dpq,dpdpdp值小的那个优先 dpp=dp原创 2020-09-20 18:31:19 · 200 阅读 · 0 评论 -
【题解】LuoGu3470:[POI2008]BBB-BBB
原题传送门 首先确定一个指导思想,就是先确定把多少个移到前面来,再计算取反哪些 所以枚举把多少个移到前面来,就是把整个数列弯成一个环,在环上枚举起点就好了 确定了起点之后,其实可以直接求出答案。 考虑要满足两个条件,任意前缀和>=−p>=-p>=−p,总和+p=q总和+p=q总和+p=q 显然第一个条件先要满足 先求出以这个点为起点,最小的前缀和,这个部分直接用单调队列搞定 对于这个最小前缀和sumsumsum,如果sum+p<0sum+p<0sum+p<0,就要花代价解原创 2020-09-13 13:14:02 · 163 阅读 · 0 评论 -
【题解】LuoGu2254:[NOI2005]瑰丽华尔兹
原题传送门 首先还是暴力dp dpt,x,ydp_{t,x,y}dpt,x,y表示时间ttt,位置(x,y)(x,y)(x,y)的答案 dpt,x,y<−−−dpt−1,x,ydp_{t,x,y}<---dp_{t-1,x,y}dpt,x,y<−−−dpt−1,x,y dpt,x,y<−−−dpt−1,lstx,lsty+1dp_{t,x,y}<---dp_{t-1,lstx,lsty}+1dpt,x,y<−−−dpt−1,lstx,lsty+1 复杂度是O原创 2020-08-29 13:43:12 · 201 阅读 · 0 评论 -
【题解】LuoGu2569:[SCOI2010]股票交易
原题传送门 开坑原创 2020-08-27 16:24:28 · 128 阅读 · 0 评论 -
[题解]LuoGu2698: [USACO12MAR]花盆Flowerpot
原题传送门 这道题在洛谷难度为蓝题(提高+省选-)个人认为难度普及+够了吧 不难想到单调队列的做法,首先二分答案,对于每个花盆宽度,我们进行O(n)的验证 维护两个单调队列,分别维护纵坐标的最小值与最大值,从左往右枚举横轴坐标,每个时刻都能计算出题目里说的时间差D,与输入的进行比较,若满足要求,则返回true Code: /* q1维护最小值,q2维护最大值 */ #include <bi...原创 2019-03-06 19:05:17 · 250 阅读 · 0 评论