
单调栈/队列
sunyutian1998
这个作者很懒,什么都没留下…
展开
-
Problem A. Ascending Rating HDU - 6319
http://acm.hdu.edu.cn/showproblem.php?pid=6319对于每个i 题目要求出[i,i+m-1]区间内以第i项为首的lis的长度和最后一项 1e7只能是线性做法 而且还需要平移区间所以应该想到单调队列 从后向前维护一个单调递减的队列即可#include <bits/stdc++.h>using namespace std;#defi...原创 2018-07-31 14:43:06 · 170 阅读 · 0 评论 -
Max answer 计蒜客
https://nanti.jisuanke.com/t/38228单调栈找出每个数的单调区间[ lef[i], rgt[i] ]如果ary[i]>0在[ lef[i]-1, i-1 ]内找一最小前缀和在[ i,rgt[i] ]内找一最大前缀和如果ary[i]<0(这个情况一开始居然忽略掉了 太傻吊) 在[ lef[i]-1, i-1 ]内找一最大前缀和在[ i,rg...原创 2019-05-03 08:49:11 · 192 阅读 · 0 评论 -
Colorful Rainbows ZOJ - 2967
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2967首先斜率相同去个重 然后单调栈维护每条直线和之前可见直线的交点及自身斜率和截距 对于新加直线 看于栈顶直线的交点位置即可#include <cstdio>#include <cstring>#include <algor...原创 2019-03-08 22:07:18 · 159 阅读 · 0 评论 -
最大值 51Nod - 1349
https://www.51nod.com/Challenge/Problem.html#!#problemId=1349单调栈找出最值区间 然后搞个后缀和就好了要注意的是扩展区间时处理好同值的数 搞成左闭右开区间就好了 #include <bits/stdc++.h>using namespace std;typedef long long ll;const ...原创 2018-11-13 16:07:05 · 171 阅读 · 0 评论 -
区间的价值 51Nod - 1564
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1564想了半天没什么好想法 一看题解就是个暴力。。说是个分治很好听 但是这样处理的区间其实就是用单调栈找出的每个最小值区间的左右端点 就和对这些区间分别暴力找最大值是一模一样的 有一个等差数列直接变n^2 到了赛场上哪有那么多随机数据给你暴力去 正解是正经...原创 2018-10-27 19:57:20 · 321 阅读 · 0 评论 -
近似有序区间 51Nod - 1249
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1249单调栈找出所有最大值区间以及最小值区间 所谓近似有序区间一定是一个最大一个最小区间相互包含构成的假设某近似有序区间为[i,j] 以a[i]为最小值的区间为[ minlef[i],minrgt[i] ],以a[j]为最大值的区间为[ maxlef[j],max...原创 2018-10-28 09:20:13 · 335 阅读 · 0 评论 -
字典序最小的子序列 51Nod - 1255
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1255记录每个字母出现的最早和最晚位置 然后扫一遍 维护一个单调栈 但是并不只考虑字母大小 还要考虑出现最早最晚位置 如果当前字母比栈顶元素小 并且栈顶元素在在之后还会出现 那就换掉这个栈顶#include <bits/stdc++.h>using...原创 2018-09-28 13:36:24 · 476 阅读 · 0 评论 -
选择子序列 51Nod - 1153
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1153想不到O(n)的方法 看题解。。B数组映射在A中就是V形的 扫一遍A len[i]表示以当前元素a[i]结尾时的最长长度 记左边第一个大于a[i]的元素为a[p]a[i]若接在a[p]后面 则代表a[i]出现在了V的左边 则每个元素的前一个只能是大于它的数...原创 2018-09-27 14:10:45 · 217 阅读 · 0 评论 -
Neko's loop HDU - 6444
http://acm.hdu.edu.cn/showproblem.php?pid=6444单调队列求有限制最大子段https://blog.youkuaiyun.com/sinat_34550050/article/details/52274141 先找出所有循环节 对于每个循环节 如果总权值为正 如果没有步数限制 那肯定是跑越多圈越好 但是最多m步 策略就需要调整了一开始想的假设步数为m ...原创 2018-08-30 01:56:26 · 229 阅读 · 0 评论 -
Function HDU - 5875
http://acm.hdu.edu.cn/showproblem.php?pid=5875对于a%b 若a<b则a%b==a不变 若a>=b则至少减小两倍 和取gcd有非常相似的性质 因为都利用到了取因数对每个数 利用单调栈找到右边第一个比他小的数 查询时不断用nxt向后跳 最多计算log次#include <bits/stdc++.h>using nam...原创 2018-08-28 18:52:30 · 182 阅读 · 0 评论 -
LC的课后辅导 QDU
点击打开链接此题暴力可过(O(n^2)) 亦可用栈优化(O(n)) 即通过栈保存矩形编号 找出每个矩形左右可到达的最远边界例如从左至右遍历 遍历至哪个矩形 该矩形的左边界即可得假设遍历至h[i]矩形 若栈顶元素stack[top]==p即为h[p]矩形的编号若h[p]大于h[i] 则弹出栈顶元素而看栈中下一个元素 直至某个矩形h[q]小于h[i] 则确定为h[i]矩形的边界(具体原...原创 2017-07-21 12:48:36 · 402 阅读 · 0 评论 -
Maximum Element In A Stack 计蒜客
https://nanti.jisuanke.com/t/28401开两个栈 一个是单调栈 每个元素记录操作次数与数值 另外一个栈单纯记录操作次数若需push一个数 如果比单调栈栈顶元素大就推进去 pop时就看另个栈的栈顶的操作次数是否和单调栈栈顶相同 相同的话说明现在该把这个最大值拿掉了 然后新的栈顶就是之前的次大值 现在的最大值 中间没有被推入单调栈的元素根本没有价值不用管...原创 2018-07-18 09:03:14 · 1595 阅读 · 0 评论 -
Sliding Window POJ - 2823
http://poj.org/problem?id=2823单调栈和队列主要思想差不多 就是单调队列会从首部弹出元素 #include <cstdio>#include <cstring>#include <algorithm>using namespace std;struct node{ int id; int val;...原创 2018-07-29 16:15:27 · 189 阅读 · 0 评论 -
Building HDU - 5033
http://acm.hdu.edu.cn/showproblem.php?pid=5033详见注释#include <bits/stdc++.h>using namespace std;const double PI=acos(-1.0);const int maxn=1e5+10;struct node{ double x,h; int tp;...原创 2019-05-15 22:19:38 · 251 阅读 · 0 评论