zoukankan      html  css  js  c++  java
  • 单调队列学习小结

    对单调队列的分析和说明就不赘述了,贴几个博客http://blog.csdn.net/justmeh/article/details/5844650 http://blog.csdn.net/justmeh/article/details/5844650

    一般来说一个单调队列需要具备一个数组,它的头尾,以及尾部添加、首部剔除和取首部元素。

    对于大部分DP题,队列插入次数不会超过枚举的状态数,所以直接开一个数组,让队列窗口在里面滑动即可,不需要使用链表等方式节约空间。

    对于许多DP问题,i状态需要从前面的0~i-1状态中选取一个最优值进行转移,而如果其最优值可单调表示(决定首部插入时能不能排除若干队列元素),且队列首部能根据i而决定是否仍能使用(决定了尾部是否能排除),就可以用单调队列优化掉每次的查找。

    单调队列的大致结构如下,括号中的内容以及参数细节需要根据题目设定及补充。

    struct MonoQue
    {
        LL arr[1000005];
        LL head,tail;
        void init()
        {
            head=tail=0;
        }
        void add(LL p)
        {
            while(tail>head)
            {
                if()
                    tail--;
                else break;
            }
            arr[tail++]=p;
        }
        void del(LL i)
        {
            while(tail>head)
            {
                if()
                    head++;
                else break;
            }
        }
        LL g()
        {
            return arr[head];
        }
    };
  • 相关阅读:
    uni-app 开发 app
    小程序上传图片到腾讯云
    前端上传文件到腾讯云
    小程序中 使用 aes 进行加密解密处理
    查询端口被占用并且结束占用的端口
    js 对象根据 id 删除一条数据
    element-ui 组件改变样式
    element-ui 弹出框在遮罩层下面
    css样式穿透
    css 清除浮动
  • 原文地址:https://www.cnblogs.com/LukeStepByStep/p/7141850.html
Copyright © 2011-2022 走看看