码迷,mamicode.com
首页 > 其他好文 > 详细

单调序列例题

时间:2019-12-14 19:36:17      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:例题   单调队列   class   最大值   nbsp   线段树   -o   div   oid   

一,

给定一个区间,求所有区间长度为L的区间的最大值和最小值

二,

该题有很多做法。

自然用的是滑动窗口(单调队列)

可能的做法:

O(nlogn)的线段树

O(nlogn)的带删除优先队列(对顶堆)

还能再快一点吗?

O(n)-O(1)RMQ代替线段树

三,

单调队列和单调栈的意思一样,始终要你维持一个单调递增或者递减的属性。

比你小还比你强,我哭了。

1 const int N= 5000010 ;
2 int q[N],l=1,r=1,a[N] , mx , mn, inq[N],n,m; 
inline void ins(int x){ 3 while(l<r&&q [r-1]<=a[x])r--; 4 q[r]=a[x]; inq[r]=x;r++; 5 } 6 inline int getmax(int cur){ 7 for(l<r;l++)if(cur- inq[l] <m)return q[l] ;}

 

 这个图片我希望能复制进去~

肯定不行啊。。

单调队列

四,

老老实实看来下代码,似乎是改了下 push(),以及把first改成了getmax()

但是如果已经单调了,挺没有必要的。

单调序列例题

标签:例题   单调队列   class   最大值   nbsp   线段树   -o   div   oid   

原文地址:https://www.cnblogs.com/beiyueya/p/12040429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!