
栈/队列
jzq233jzq
这个作者很懒,什么都没留下…
展开
-
斜率优化DP——BZOJ1010/Luogu3195 [HNOI2008]玩具装箱TOY
题面:Luogu3195 BZOJ1010 本来以为斜率优化是个什么高级东西。。。这题入门之后…… 发现也没什么难的吧O(n2)O(n^2)做法: f[i]f[i]表示选完1~i个物品所花最小花费 转移:f[i]=min(f[j]+(i−j−1+s[i]−s[j]−L)2)f[i]=min(f[j]+(i-j-1+s[i]-s[j]-L)^2) s[i]s[i]表示从1~i的c[i]c[i原创 2017-07-11 08:23:58 · 264 阅读 · 0 评论 -
DP——BZOJ1855/Luogu2569 [SCOI2010]股票交易
题面:BZOJ1855 Luogu2569 DP肯定的 状态:f[i][j]表示前i天目前持有j股的最大收益 有几种转移方式: 不买不卖:f[i][j]=f[i-1][j] 买:f[i][j]=max(f[i-1][k]-ap[i]*(j-k))(k < j) 卖:f[i][j]=max(f[i-1][k]+bp[i]*(k-j))(k > j) 但是枚举k的话时间复杂度是O(t*ma原创 2017-07-02 22:38:05 · 623 阅读 · 0 评论 -
单调栈——BZOJ1057/Luogu1169 [ZJOI2007]棋盘制作
题面:BZOJ1057 洛谷1169 首先显然发现合法棋盘的格子,与其相邻的格子全部与它不同色 那么我们可以预处理一下,把它们转成同色 是这样的 for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ scanf("%d",&a[i][j]); if((i+j)&1)a[i][j]^=1;/原创 2017-05-09 08:46:40 · 620 阅读 · 4 评论 -
树状数组——BZOJ3192/Luogu3253 [JLOI2013]删除物品
干脆题面以后用HTML写传送门吧 BZOJ传送门 洛谷传送门 我们可以试一下把两个堆(其实这是个栈)拼起来(栈顶拼栈顶)比如样例拼成:5 4 1 2 7 3 然后把栈顶视为一个指针,每次出栈只要移动指针即可 然后区间弹栈信息我们用树状数组维护一下,移动次数就可以算出来了#include<bits/stdc++.h>using namespace std;typedef long lon原创 2017-04-19 14:48:12 · 358 阅读 · 0 评论 -
单调栈——BZOJ1660/Luogu2866 [USACO06NOV]Bad Hair Day
http://www.lydsy.com/JudgeOnline/problem.php?id=1660 https://www.luogu.org/problem/show?pid=2866 单调栈裸题 入栈时与栈顶元素比较,如果栈顶元素小于等于加入的数那就弹出并且加上栈顶元素能够看到的数目(现加入的数的位置-栈顶元素位置-1),直到达到条件后入栈 全部入栈后最后累加还在栈内元素的答案就好原创 2017-04-17 10:02:51 · 316 阅读 · 0 评论 -
单调队列——Luogu3088 [USACO13NOV]Crowded Cows
https://www.luogu.org/problem/show?pid=3088 单调队列的裸题吧(虽然我好像也是第一次自己写出单调队列) 按照位置排序以后直接上两遍单调队列处理出前面和后面分别是否能够达到条件 其他我就不说了吧#include<bits/stdc++.h>using namespace std;struct ppap{ int x,y;}a[100001]原创 2017-04-14 08:42:34 · 422 阅读 · 0 评论 -
单调栈+树状数组——51nod1249 近似有序区间
题面:51nod1249 这题题解蛮少的(我没有看官方题解)而且貌似都是线段树,但是讨论里给出了一个很巧妙的做法 我们可以先求出第ii位数作为最大值最远能延伸到的左端点b[i]b[i],和作为最小值最远能延伸到的右端点c[i]c[i],这个用单调栈就可以了 然后我们可以发现对于任意一组i,j(i<j)i,j(i<j),如果b[j]<=ib[j]<=i而且c[i]>=jc[i]>=j,区间[i,原创 2017-09-22 21:55:40 · 544 阅读 · 0 评论 -
单调栈+STL——51nod1952 栈
题面:51nod1952 首先数据范围是1e7,复杂度上界肯定是O(n)O(n) 所以我们可以直接往单调栈(或者也可能是队列)这个方面想 然而这个东西要资瓷两端插入,一端弹出,这貌似是个双端单调栈 我一开始的想法是,维护一个单调递减的栈,如果从后面插入,那就从后面插入维护单调性,如果从前面插入,那就与栈底判断是否要插进去,答案就是栈底啦。。。 然而这样有一个很大的Bug,就是弹出的时候就G原创 2017-09-12 23:14:13 · 997 阅读 · 0 评论