随笔分类 - 其他——单调队列/单调栈/斜率优化
摘要:https://acm.hdu.edu.cn/showproblem.php?pid=6989 题意: 定义一个区间[L,R]的平均值为(最大值+最小值)/2 若干次询问[l,r],求[l,r]子区间平均值的期望 对[l,r]求所有子区间的最大值之和+最小值之和 然后除以2再除以子区间个数 求子区间
阅读全文
摘要:https://www.luogu.com.cn/problem/P3246 解法一:莫队+ST表+单调栈 考虑如何由[L,R]的答案推向[L,R+1]的答案 [L,R]向[L,R+1],增加的是[L,R+1] [L+1,R+1] [L+2,R+1] …… [R,R+1] [R,R] 这些区间每个区
阅读全文
摘要:https://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1008&cid=984 题意: 从n行m列矩阵中,找出最大的满足每列不降的子矩阵 题解: 如果下一列比上一列的数大,标记T,否则标记F 问题转化为在n-1行m列矩阵中,找最大的T
阅读全文
摘要:https://ac.nowcoder.com/acm/contest/12606/E 在贪心的基础上运用类似于单调栈的思想 从前往后考虑每个数 假设当前的答案序列为ans[] 考虑极端情况下有无数个数,那么只要现在的数比答案序列的最后一个更小,那么把答案序列的最后一个换成现在的数会更优 当答案序列
阅读全文
摘要:题意: 给出一个数字串,问所有本质不同的子串的最大值之和 如果没有本质不同的要求,就是用单调栈求出每个数字前后第一个大于它的位置,扫一遍计算即可 现在要本质不同,用后缀数组 按字典序依次计算每个后缀的贡献 对于已经按字典序从小到大排好序的后缀i-1和i来说 以i为子串左端点,[i,height[i]
阅读全文
摘要:https://pintia.cn/problem-sets/994805046380707840/problems/994805047638999040 %%大神O(n)思路双手膜%% 首先嵌套包含的区间只留下最短的那个 因为假设区间a包含了区间b 如果最后的答案是区间a贡献1,区间b贡献1 那么
阅读全文
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=3238 跟 bzoj3879 差不多 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using n
阅读全文
摘要:https://www.lydsy.com/JudgeOnline/problem.php?id=3879 把所有的后缀取出,按rank排序 求出相邻两个后缀的lcp 每个后缀对答案的贡献就是 与在它之前的后缀的lcp之和 维护一个单调递增的栈,记录栈中元素的lcp之和 即可 #include<cs
阅读全文
摘要:题意: 给出n个三元组 e[i]=(si,ti,wi) 第i个三元组的价值为 Σ w[j] ,j 满足以下4个条件: 1、j<i 2、tj<ti 3、sj<si 4、不存在j<k<i,且sj<sk<si 把每个三元组看作二维平面上的一个点(i,si) 先不考虑t, 那么j若满足要求,必须满足以(j,
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=3672 法一:线段树维护可持久化单调队列维护凸包 斜率优化DP 设dp[i] 表示i号点到根节点的最少花费 dis[i] 表示 点i到根节点的距离 dp[i]= min { (dis[i]-dis[j]
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=5956 转移方程:dp[i]=(dis[i]-dis[j])*(dis[i]-dis[j])+P+dp[j] 斜率优化,可持久化单调队列维护 #include<cstdio> #include<cstring> #
阅读全文
摘要:https://www.luogu.org/problemnew/show/P3994 设dp[i] 表示第i个城市到根节点的最小花费 dp[i]=min{ (dis[i]-dis[j])*P[i]+Q[i]+dp[j] } 这是O(n^2)的 这个式子可以斜率优化 dp[i]+dis[j]*P[i
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=1492 dp[i] 表示 第i天卖完的最大收益 朴素的dp: 枚举从哪一天买来的在第i天卖掉,或者是不操作 dp[i]=max(dp[i-1],X[j]*A[i]+Y[j]*B[i]) 其中X[j]表示
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=2448 一遍过,嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎嘎,O(∩_∩)O~ 题意是最小化最大值 设计区间dp dp[i][j] 表示在能确定x不在区间[i,j]内,或确定x在区间[i,j]内某个位置的最坏情况下的最小值
阅读全文
摘要:http://codevs.cn/problem/5429/ 把背包体积按 模物品体积 分类 在每个剩余类中使用单调队列 具体点就是 设物品体积为v,价值为w,现在要计算体积模v=0时的价值 设f[i][j] 表示 前i个物品,体积为j时的最大价值 f[i][5v]=max{ f[i-1][4v]+
阅读全文
摘要:http://poj.org/problem?id=2373 题意: 在长为L的草地上装喷水头,喷水头的喷洒半径为[a,b] 要求草地的每个整点被且只被一个喷水头覆盖 有N个特殊区间,要求只能被某一个喷水头完整地覆盖,而不能由多个喷水头分段覆盖 求喷水头的最小数目 喷水头只能建在整数点上 f[i]
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=1047 先用单调队列求出每横着n个最大值 再在里面用单调队列求出每竖着n个的最大值 这样一个位置就代表了一个n*n矩阵的最大值 同理求出最小值 #include<cstdio> #include<ios
阅读全文
摘要:期望得分:100+100+40=240 实际得分:100+100+20=220 T1 sum[r]^sum[l-1]<k 对前缀异或和建trie树 假设当前是第i位,sum[r]的地i位是l 如果k的第i位为1,累加l,当前指针转到sum[r]的l^1 否则,当前指针直接转到sum[r]的l #in
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=1791 就是求所有基环树的直径之和 加手工栈 #include<cstdio> #include<vector> #include<iostream> #include<algorithm> using
阅读全文
摘要:http://www.lydsy.com/JudgeOnline/problem.php?id=1023 dp[x] 表示以x为端点的最长链 子节点与x不在同一个环上,那就是两条最长半链长度 子节点与x在同一个环上,环形DP,单调队列优化 对于每一个环,深度最小的那个点 有可能会更新 上层节点, 所
阅读全文