单调队列

板子

求区间最值

        while(!q1.empty() && q1.back().data>=a[i])q1.pop_back();
        //队列中的元素单调递增,如果当前元素比队尾元素大就无法保证单调性,应该弹出
        q1.push_back((element){a[i],i});//插入元素
    }
    for(int i=k;i<=n;++i){
        while(!q1.empty() && q1.back().data>=a[i])q1.pop_back();
        q1.push_back((element){a[i],i});
        while(!q1.empty() && i-q1.front().pos+1>k)q1.pop_front();
        //弹出过期元素
        printf("%d ",q1.front());
    }

例题 :滑动窗口,理想正方形

维护某个单调关系

例题:广告印刷,look up,广告印刷

posted @   Chano_sb  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示