![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
单调栈/单调队列
v5zsq
新的一天,新的不会
展开
-
POJ 3250 Bad Hair Day(单调栈)
Description 一群高度不完全相同的牛从左到右站成一排,每头牛只能看见它右边的比它矮的牛的发型,若遇到一头高度大于或等于它的牛,则无法继续看到这头牛后面的其他牛。给出这些牛的高度,要求每头牛可以看到的牛的数量的和。 Input 第一行为牛数n,之后n行每行一个整数表示牛的高度 Output 输出每头牛可以看到的牛的数量 Sample Input 6 10 3 7 4原创 2015-07-13 08:55:35 · 587 阅读 · 0 评论 -
HDU 6052 To my boyfriend(分块+容斥原理+单调栈)
Description 给出一个n*m矩阵A,问所有子矩阵中不同数字个数的期望 Input 第一行一整数T表示用例组数,每组用例首先输入两个整数n和m表示矩阵行列数,之后输入一n*m矩阵A[i][j] (T<=9,1<=n,m<=100,0<=A[i][j]<=n*m) Output 输出子矩阵中不同数字个数的期望,结果保留到小数点后九位 Sample Input 1 2 3 1原创 2017-07-30 13:37:17 · 443 阅读 · 0 评论 -
HDU 5751 Eades(单调栈+FFT)
Description Peter有一个序列a[1],a[2],…,a[n],定义g(l,r)表示子序列{a[l],a[l+1],…,a[r]}的最大值, f(l,r)=sum{[a[i]==g(l,r)]}(l<=i<=r). 注意[condition]=1当且仅当condition是true, 否则[condition]=0 对于每个整数k∈{1,2,…,n}, Peter想要知道有多少整原创 2016-07-25 10:47:40 · 701 阅读 · 0 评论 -
CodeForces 601 B.Lipshitz Sequence(单调栈)
Description 根据利普希茨条件定义一个长度为n的序列h的L(h)值: n<2,L(h)=0; n>=2,(1<=i< j<=n) 现给出一长度为n的序列a,给出q次查询,每次查询给出一个区间[l,r],求序列s={a[l],…,a[r]}的所有子序列L值之和 Input 第一行为两个整数n和q表示序列长度和查询次数,第二行n个整数ai表示这个序列...原创 2015-12-07 09:36:29 · 960 阅读 · 2 评论 -
POJ 2823 Sliding Window(单调队列)
Description 给定一个大小已知的数组以及一个大小已知的滑动窗口,窗口每个时刻向后移动一位,求出每个时刻窗口中数字的最大值和最小值 Input 第一行为两个整数n和k分别表示数组长度和窗口长度,第二行为n个整数表示数组 Output 求出每个时刻窗口中数字的最值,第一行为最小值,第二行为最大值 Sample Input 8 3 1 3 -1 -3 5 3 6 7 Sampl原创 2016-01-02 16:23:10 · 790 阅读 · 0 评论 -
HDU 6319 Problem A. Ascending Rating(单调队列)
Description给出一个长度为nnn的序列,对于该序列的每个长度为mmm的子区间[i,i+m−1][i,i+m−1][i,i+m-1],令maximaximax_i表示该区间最大值,counticounticount_i表示从前往后遍历该区间时最大值的改变次数(只有严格变大才会计数),令 A=∑i=1n−m+1maxi⊕i,B=∑i=1n−m+1counti⊕iA=∑i=1n−m+1m...原创 2018-09-04 08:21:49 · 149 阅读 · 0 评论 -
HDU 6305 RMQ Similar Sequence(概率+单调栈)
Description对于一个序列A={a1,...,an}A={a1,...,an}A=\{a_1,...,a_n\},记RMQ(A,l,r)RMQ(A,l,r)RMQ(A,l,r)表示最小的iii使得aiaia_i是al,...,aral,...,ara_l,...,a_r中的最大值,给出序列AAA,而序列B={b1,...,bn}B={b1,...,bn}B=\{b_1,...,b_n\...原创 2018-09-03 16:35:52 · 257 阅读 · 0 评论 -
BJTUOJ 1851 wd 打 boss(dp+单调栈)
Description众所周知,wdwdwd非常喜欢玩游戏,最近他在玩一款游戏的时候卡在了最后一关。最后一关有 n×nn×nn×n 块地板,nnn行nnn列,每块地板上都有尖刺,初始的时候一些地板的尖刺朝上,一些地板的尖刺朝下,尖刺朝上的地板不可以踩。wdwdwd 可以通过使用氪金道具翻转一整行或者一整列的地板,使原来朝上的尖刺变成朝下,朝下的尖刺变成朝上。现在 wdwdwd 需要找到...原创 2018-04-26 15:29:42 · 246 阅读 · 0 评论 -
Newcoder 140 K.carpet(hash+kmp+单调队列)
Description给出一个n×mn×mn\times m的矩阵AAA,每个元素有权值,由AAA矩阵不断复制得到一个无限大矩阵CCC,求AAA矩阵的一个p×qp×qp\times q子矩阵BBB使得BBB矩阵也能生成CCC矩阵且BBB的代价(BBB中元素点权最大值⋅(p+1)⋅(q+1)⋅(p+1)⋅(q+1)\cdot (p+1)\cdot(q+1))最小Input第一行两个整数n...原创 2018-09-15 22:03:50 · 238 阅读 · 0 评论 -
Newcoder 84 A.字典序最大的子序列(单调栈)
Description给定字符串sss,sss只包含小写字母,请求出字典序最大的子序列。Input一行一个字符串sss$ (1 \le |s| \le 10^5)$Output字典序最大的子序列。Sample InputababbaSample OutputbbbaSolution对sss维护一个不增的单调栈即可Code#include<cstdio>...原创 2018-10-18 20:53:33 · 495 阅读 · 0 评论 -
SPOJ 24258 DRUIDEOI - Fata7y Ya Warda!(单调栈)
Description 编号为1~n的n个人站成一圈,给出每个人的身高,对于每个人,找到其左边和右边第一个身高高于其身高的人的编号,如果没有人身高比这个人高则输出-1 -1 Input 第一行一整数T表示用例组数,每组用例首先输入一整数n表示人数,之后输出每个人的身高a[i] (1<=T<=20,1<=n<=1e5,1<=a[i]<=1e9) Output 输出n行,第i行输出第i个人左边原创 2017-07-13 10:46:45 · 429 阅读 · 0 评论 -
CodeForces 631 C.Report(单调栈)
Description 给出一个长度为n的序列a,两种操作: 1 x:把前x个数升序排 2 x:把前x个数降序排 问m次操作后的序列 Input 第一行两个整数n和m分别表示序列长度和操作数,之后n个整数ai表示该序列,最后m行每行表示一个操作(1<=n,m<=2e5) Output 输出操作后的序列 Sample Input 3 1 1 2 3 2 2 Sample Ou原创 2017-04-27 11:28:16 · 422 阅读 · 0 评论 -
POJ 2796 Feel Good(单调栈)
Description 给出一个长度为n的序列,定义一个区间的参考值:区间和*区间最小值,求这个序列中的最大区间参考值以及其对应的区间 Input 第一行为一整数n表示序列长度,第二行n个整数表示这个序列(1<=n<=100 000) Output Sample Input 6 3 1 6 4 5 2 Sample Output 60 3 5 Solution 首先求个前缀和原创 2016-01-05 17:19:55 · 674 阅读 · 0 评论 -
POJ 3017 Cut the Sequence(dp+单调队列)
Description 给出一个长度为n的序列,要求将这个序列划分成若干块,使得每块的和不超过m,且每块的最大值之和最小 Input 第一行为两个整数n和m分别表示序列长度和划分块的和上限,之后n个整数表示这个序列 Output 输出各块最大值之和的最小值,如果不存在满足条件的划分方案则输出-1 Sample Input 8 17 2 2 2 8 1 8 2 1 Sample Ou原创 2016-01-05 17:37:24 · 888 阅读 · 0 评论 -
HDU 5122 K.Bro Sorting(单调栈)
Description 给一个由1~n组成的序列,每次可以将一个数移到任意位置,问最少移动多少次可以将整个序列变成1~n有序的 Input 第一行为一整数T表示用例组数,每组用例第一行为一整数n表示序列长度,第二行n个整数表示该序列(1<=T<=200,1<=n<=10^6) Output 对于每组用例,输出最少操作次数 Sample Input 2 5 5 4 3 2 1 5原创 2016-03-31 11:43:51 · 521 阅读 · 0 评论 -
POJ 3415 Common Substrings(后缀数组+单调栈)
Description 给出两个串a和b,求a和b的长度不小于k的公共子串数量 Input 多组用例,每组用例第一行为一整数k,之后为两个字符串表示a和b,两个串的串长不超过10^5,k不超过两串串长,以k=0结束输入 Output 对于每组用例,输出a和b的长度不小于k的公共子串数量 Sample Input 2 aababaa abaabaa 1 xx xx 0 Sa原创 2016-05-03 13:29:44 · 543 阅读 · 0 评论 -
HDU 5749 Colmerauer(单调栈)
Description Peter有一个n×m的矩阵M. 定义S(a,b)为M的所有大小为a×b的子矩阵的权值和. 一个矩阵的权值是这个矩阵所有鞍点的值的和. 在矩阵中, 一个数在所在行中是唯一的最小值, 在所在列中是唯一的最大值, 则被称为鞍点. 帮助Peter找出所有S(a,b)的值 Input 输入包含多组数据, 第一行包含一个整数T表示测试数据组数. 对于每组数据: 第一行包含两个整原创 2016-07-25 10:13:03 · 453 阅读 · 0 评论 -
HDU 5875 Function(单调栈+在线倍增法)
Description n支队伍比赛,每支队伍要和其他n-1支队伍各比一场,赢得一份,输不得分,现给出n支队伍的最终得分,问是否存在满足此得分的情况 Input 第一行一整数T表示用例组数,每组用例首先输入队伍数n,之后n个整数ai表示第i支队伍的最终得分(T<=50,n<=50000,0<=ai < n) Output 如果存在满足此得分的情况则输出“It seems to have n原创 2016-09-16 10:43:15 · 439 阅读 · 0 评论 -
SPOJ 20863 MINSUB - Largest Submatrix(二分+单调栈)
Description 给出一个n*m的矩形和一整数k,问这个矩阵的所有面积不小于k的子矩阵中最小值的最大值ans,和所有最小值等于ans的面积不小于k的子矩阵的最大面积S Input 第一行一整数T表示用例组数,每组用例输入三个整数n,m,k分别表示矩阵规模和要求的子矩阵面积下限,之后一个n*m矩阵a[i][j] (T<=10,n,m<=1000,k<=n*m,a[i][j]<=1e9)原创 2017-04-10 14:45:17 · 559 阅读 · 0 评论 -
GYM 101061 E.Playing with numbers(单调栈)
Description 给出一个数字串,可以去掉其中任意n个数字,问去掉之后该数字串的最小值和最大值 Input 第一行一整数T表示用例组数,每组用例输入一个数字串s和一整数n表示要去掉的数字个数(0<=s<=1e100000,0<=n<=|s|) Output 输出两个数字串分别表示s去掉s个字符后的最小值和最大值 Sample Input 3 00123 2 00123 3原创 2017-03-25 09:36:44 · 485 阅读 · 0 评论 -
GYM 101102 D.Rectangles(单调栈)
Description 给出一个n*m矩阵,统计合法子矩阵数量,合法子矩阵指的是这个子矩阵所有数字相同 Input 第一行一整数T表示用例组数,每组用例首先输入两个整数n和m表示矩阵行列数,之后一个n*m矩阵A[i][j] (1<=n,m<=1000,1<=A[i][j]<=1e9) Output 对于每组用例,输出合法子矩阵数量 Sample Input 1 3 3 3 3原创 2017-03-16 16:07:39 · 391 阅读 · 0 评论 -
HDU 6444 Neko's loop(单调队列)
Description给出nnn个数a0,...,an−1a_0,...,a_{n-1}a0,...,an−1顺序围成一圈,任选起点,每次可以从aia_iai跳到a(i+k)%na_{(i+k)\%n}a(i+k)%n位置,至多跳mmm次,问所经过的位置的值之和至少需要加多少才能达到sss,如果该值已经不小于sss则输出000Input第一行一整数TTT表示用例组数,每组用例首先输入...原创 2018-09-30 10:52:42 · 325 阅读 · 0 评论