欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    单调栈和单调队列(精品) .ppt

    • 资源ID:2657646       资源大小:205KB        全文页数:12页
    • 资源格式: PPT        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    单调栈和单调队列(精品) .ppt

    ,单调栈和单调队列,by Tisuama,定义:,单调栈:栈内的元素,按照某种方式排序下(单调递增或者单调递减)如果新入栈的元素破坏了单调性,就弹出栈内元素,直到满足单调性,为什么要学习单调栈:,它可以很方便地求出某个数的左边或者右边第一个比它大或者小的元素,而且总时间复杂度O(N)。,如何维护单调栈:(以维护单调递增栈为例),进栈操作:每次入栈前先检验栈顶元素和进栈元素(x)的大小,如果小于x,就让x直接入栈。如果栈顶元素大于等于x,那么出栈,直到栈空或者栈顶元素小于x,例如:1 4 3 6 0,初始时刻栈空,1入栈。-栈内元素(1),4要进栈,4大于1,所以直接进栈.-栈内元素(1,4),3要进栈,3小于4,4出栈,3进栈.-栈内元素(1 3),6要进栈,6大于3,6直接进栈。-栈内元素(1,3,6),0要入栈,1,3,6都出栈,-栈内元素(0),例题,POJ 2559,题意:给出一个柱形统计图(histogram),它的每个项目的宽度是1,高度和具体问题有关。现在编程求出在这个柱形图中的最大面积的长方形(n=1e5),例如:2,1,4,5,1,3,3,最大面积:8,那么问题来了:如何算?,分析,逐个考虑每个项目,那么如何得到每个项目被包含的长方形了?,假设考虑到项目x,通过简单的思考,我们可以得出结论,x的左右两边的项目高度都不能比x低,那么如何求项目x的两边延伸长度?,我们想到了单调栈?为什么(以求x左边延伸长度为例),假设我们建立一个单调递增栈,那么我们可以轻松地求得x左边比x小的第一个数的位置。,那么问题来了:为什么是单调递增栈,为什么是比x小?,求x右边延伸相同处理,实现方式,栈(以求x的向左延伸为例),int top=0,smaxn;for(int i=1;i=n;i+),while(top,Li=(top=0?1:stop+1);,s+top=i;,并查集,L1=1;for(inti=2;i=n;i+),int pos=i;while(pos-1=1,Li=pos;,定义:,单调队列:队列中元素之间的关系具有单调性,而且,队首和队尾都可以进行出队操作,只有队尾可以进行入队操作。,为什么要学习单调队列:,对于维护好的单调队列,对内元素是有序的,那么取出最大值(最小值)的复杂度是O(1),可以拿来优化DP(然而弱不会),如何维护单调队列:,队尾入队的时候维护单调性。,例题,POJ 2823,给定一个大小已知的数组以及一个大小已知的滑动窗口,窗口每个时刻向后移动一位,求出每个时刻窗口中数字的最大值和最小值。(n=1e6),例如:input8 31 3-1-3 5 3 6 7,output:-1-3-3-3 3 33 3 5 5 6 7,如何解啊如何解?,区间最值问题:我们想到了啥?线段树?RMQ?,新姿势!单调队列!O(n)!,O(nlog(n)!,分析,以得到最小值为例:,我们维护一个单增的队列,那么每次滑动窗口入队之后就要得到一个区间最小值,按照刚才的理论,直接取队首元素就可以了?,具体做法:每次滑动窗口要得到最小值的时候,判断队首元素是否过期,如果过期,就从队首出队,继续找。,最大值做法同上:维护一个单减队列。,实现方式,void get_min()int tail=0,head=1;for(int i=1;i=ai)-tail;q+tail=ai;ptail=i;for(int i=k;i=ai)-tail;q+tail=ai;ptail=i;while(pheadi-k+1)+head;mii-k+1=qhead;,Special,head,tail,我们发现,每次从尾部入队前都会比较大小-注意对象是队内元素,但是队内元素都是按次序入队,即队内元素都是比当前要入队的次序小,所以单调队列里的元素都是有次序的(由小到大)所以,我们要查找某个id的时候,也可以二分。,最后练习的六道题目已经在VJ上挂出来了,欢迎AC,谢谢观赏,

    注意事项

    本文(单调栈和单调队列(精品) .ppt)为本站会员(文库蛋蛋多)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开