单调队列

板子

求区间最值

        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 @ 2022-05-13 09:26  Chano_sb  阅读(26)  评论(0)    收藏  举报