
单调栈
Exception2017
OI总结
展开
-
快乐AK场2 E 删删删越小越好 单调栈
链接:https://ac.nowcoder.com/acm/contest/11471/E来源:牛客网这一天Kadia与Majiagou在教学弟,突然提出了一个问题 给你一个超大的数字 让你从中删掉几位 怎么让他最小?这种签到题不会还有人写不出来吧 不会吧不会吧题解:考虑单调栈,如果新来的比栈顶元素小就退栈。当然为了省事就用deque写了。#include<bits/stdc++.h>using namespace std;deque<char> s;string原创 2021-01-23 20:50:33 · 137 阅读 · 0 评论 -
AT2289 Yakiniku Restaurants 单调栈+二维差分
原题:https://www.luogu.org/problemnew/show/AT2289题解:根据题意,可以分析出对于一个确定的区间[L,R]答案是确定的,就是每个m的最大值之和-路程。时间复杂度为:O(n^2*m)。倒过来想若B(i,j)有影响一定是第j列第[x,y]行且x<i<y,区间中的数都比B(i,j)小。很容易想到用单调栈求出每个点的左右扩展。设f(i,j)表示...原创 2019-03-23 00:29:43 · 222 阅读 · 0 评论 -
[ZJOI2007]棋盘制作 单调栈||dp
原题:https://www.luogu.org/problemnew/show/P1169题解:求最大的01正方形和矩形。若只求01中最大矩形可以用单调栈一列一列做,设f(i,j)为第i行第j列最长连续的0的长度。用单调栈维护最大矩形面积就行了。但本题要求01交替的矩形面积。我们考虑做两遍,将相邻斜线的0全改成11 0 1 1 1 1 { 1 2 30 1 0...原创 2019-03-09 18:58:45 · 139 阅读 · 0 评论 -
poj3415 Common Substrings 后缀数组+单调栈
原题:http://poj.org/problem?id=3415题解:求满足S = {(i, j, k) | k≥K, A(i, k)=B(j, k)}.的个数。就是求A,B中各自后缀lcp≥k的个数。将两个字符串(s1,s2)中间加个字符拼起来(s3),设f(A)为A字符串中后缀大于等于k的个数,f(A)可以用后缀数组+单调栈得出。对于本题一种做法是分别求f(s1),f(s2),f(s3)...原创 2019-02-26 23:25:06 · 168 阅读 · 0 评论 -
CF319B Psychos in a Line 单调栈
原题:http://codeforces.com/problemset/problem/319/B题解:给一个序列,若该位置的值大于左边就可以将右边吃掉,问要进行多少次这样的操作。可以用单调栈,栈中存两个值,大小和答案。若当前元素大于栈顶元素就弹出,若没有弹出任何元素,就只进行了一次操作,若将栈弹空,则为0,当前的答案为弹出的最大值+1。#include<cstdio>#i...原创 2019-02-26 22:01:20 · 230 阅读 · 0 评论 -
BZOJ2086 [POI2010] Blocks 单调栈
原题:https://www.luogu.org/problemnew/show/P3503题解:这道题本质上是求最大平均值大于k区间长度。a[i]-x做前缀和,符合条件的是区间和大于0的,显然若i<j且sum[i]<sum[j]时最好。用单调栈维护单调递减,枚举右端点n->1更新答案。#include<cstdio>#include<cstring...原创 2019-03-02 22:16:22 · 161 阅读 · 0 评论 -
[CEOI2011]Balloons 单调栈
原题:https://www.luogu.org/problemnew/show/P4697题解:给n个气球,和最大的膨胀半径,当这个气球与他之前相切或到最大的膨胀半径时停止充气,求每个气球的半径。考虑暴力的方法,每个气球应与他之前的都比一遍,最小半径就是这个点的半径。若一个点的半径比之前的一个大,那么它前面一个就是答案。所以有效半径应该是递减的,可以用单调栈弹栈时算答案就行了。#inc...原创 2019-03-02 18:40:56 · 276 阅读 · 0 评论 -
CF407E k-d-sequence 数列分块或线段树+单调栈
原题:http://codeforces.com/contest/407/problem/E题解:求添加k个元素后最长的等d差序列的左右端点,首先答案应该是连续的%d余数相同的一段(注意会有负数),而且这一段不可能有相同的数。对于这样的一段,将它除d化成公差为1的数列,在max{a[l-r]}-min{a[l-r]}-r<=k-l 时是等差数列。对于这样的问题考虑倒序枚举左端点,令mm[...原创 2019-03-01 23:44:48 · 297 阅读 · 0 评论 -
CF631C 单调栈
原题:http://codeforces.com/contest/631/problem/C题解:m次操作,将1-ri的序列升序或降序排序,经过分析,若之后的r比之前的r大,将会覆盖掉之前的操作,若t一样,之后的r比之前的小,之后的答案就无用了。根据这样的原则,可以用单调栈处理一下m操作,保证操作的r递减,t呈交替出现,用两个指针模拟就行了。#include<cstdio>...原创 2019-02-23 21:34:46 · 465 阅读 · 1 评论 -
CF123D String 后缀数组+单调栈
原题:http://codeforces.com/contest/123/problem/D题解:题目中定义F(x,y),k 表示y在x中的个数,F(x,y)=k*(k+1)/2。求所有子串的F函数的和。先用后缀数组处理,后缀的前缀表示子串,再用height数组求解。注意到F函数,可以转化成每个y串与后缀匹配的个数,可以用单调栈求解,就是求剩余矩形的面积。#include<cstd...原创 2019-02-15 23:54:23 · 332 阅读 · 0 评论