永发信息网

单调队列是什么

答案:2  悬赏:0  手机版
解决时间 2021-03-01 18:04
今天在rq看了道题目
http://www.rqnoj.cn/Problem_Show.asp?PID=460
大牛说这题道题目要用单调队列
我在网上找也没找到
来这里请教一下
说详细一点

不要直接复制的
网上的我都看过了

谢谢了
最佳答案
至于 460 的单调队列,就我目前的看法,只能实现 O(NlgN) 的算法(嗯,之前写的所谓 O(N) 算法是有问题的,至少不太好实现)。

我大致说一下,从前往后枚举以每个元素结尾的符合要求的二元组个数,并且不断维护之前的数组。显然,在之前数组的任意位置都不应出现逆序对(逆序对的后一个元素显然是没有前途的)。删去所有逆序对之后得到的就是一个单调非增的序列。于是对于以当前元素结尾的二元组,在之前的队列中从第一个比当前元素大的元素开始直到结尾的所有元素都符合要求,可以二分查找出这个位置,这一步 O(lgN)。之后我们将当前元素插入队列,由于原先队列已经有序,所以只要将队头比当前元素小的删除即可,平摊复杂度 O(1)。

至于 O(N) 算法,后来想了一下,理论上来说插入队列时删去的元素个数(大多数情况下再加1)就是当前元素结尾的二元组个数。但是有一种情况,就是出现与当前元素相等的元素,这种元素不能删除,只能一个一个统计。所以每步操作复杂度就不是 O(1) 了。不过理论上可以再用一些东西标记以实现 O(1),我没细想了。
全部回答
从前往后枚举以每个元素结尾的符合要求的二元组个数,并且不断维护之前的数组。显然,在之前数组的任意位置都不应出现逆序对(逆序对的后一个元素显然是没有前途的)。删去所有逆序对之后得到的就是一个单调非增的序列。于是对于以当前元素结尾的二元组,在之前的队列中从第一个比当前元素大的元素开始直到结尾的所有元素都符合要求,可以二分查找出这个位置,这一步 o(lgn)。之后我们将当前元素插入队列,由于原先队列已经有序,所以只要将队头比当前元素小的删除即可,平摊复杂度 o(1)。 至于 o(n) 算法,后来想了一下,理论上来说插入队列时删去的元素个数(大多数情况下再加1)就是当前元素结尾的二元组个数。但是有一种情况,就是出现与当前元素相等的元素,这种元素不能删除,只能一个一个统计。所以每步操作复杂度就不是 o(1) 了。不过理论上可以再用一些东西标记以实现 o(1),我没细想了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
权力与权利的区别?请解释下面一句话。
【冒昧的意思】“冒昧”的具体的解释意思是什
619.9元大写怎么写
朋友母亲过八十大寿送什么?
阿山车行地址有知道的么?有点事想过去
下列美称哪一项不是形容海洋资源丰富的DA. “
500 Servlet Exception怎么解决  java.lang.
两万,二十万,两百万,两千万,两亿,二十亿
佛山科牌智能科技有限公司怎么样?
长沙市芙蓉区民政局我想知道这个在什么地方
岜尧在哪里啊,我有事要去这个地方
古代中国农业社会发达,创造了先进的农业文明
分析测试中心做的xrd数据怎么打开
邮政快递,上海到石家庄多长时间?
中兴zxv10b760ev3是4k智能机顶盒吗?
推荐资讯
舒雅保健按摩中心这个地址在什么地方,我要处
我们的代码要执行,必须先把代码放进内存里吗
万和电热水器dscf60-e3电脑板多少钱
明波数码喷画怎么去啊,有知道地址的么
四川康贝大药房连锁有限公司金牛区万英大药房
变压器原边、副边漏抗如何计算?
男人40岁左右还能生孩子吗?
内环境保持相对稳定是人体各项生命活动顺利进
已知射线OC将角AOB分成1:3的两部分,若角COD=
请问1.6排量汽车油耗一公里要多少钱
红梅美容美发婚纱相馆地址有知道的么?有点事
北纬24度44分与北纬29度03分 哪个先日出?以冬
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?