• 单调队列模板


    #define N 100100

    /*
    *****************_单调队列模板_******************/ //基于单调队列功能的单一性:以limit为序查找在一定范围内的极值。 //复杂度:O(n) //用法: 创建的时候调用.init() // 插入队列:.push( Q_Node( KEY,LIMIT ) ); // 设置limit值:.setlimit( LIMIT ); // 查询<limit值的最大元素: Q_Node qn; q2.top(qn); // 再查询前需要设置limit值,如果队列为空返回false,否则将最大元素存入qn中并返回true struct Q_Node { int key,limit;//用来比较大小的key和控制存在时间的limit Q_Node(){} Q_Node(int _key,int _limit){ key=_key,limit=_limit; } }; struct Q_Que { Q_Node Q[N]; int qf,qd; int limit;// <limit 的元素将被弹出 void init() { qf = qd = 0;//将队列内元素清空 } void push(Q_Node newnode) {//默认入队是当前limit最大的 while (qf>qd && Q[qf-1].key < newnode.key) qf--; Q[qf++] = newnode; } void setlimit(int _limit) { limit = _limit; } /* 取出队列中>=limit且key最大的元素。 */ bool top(Q_Node &rt) { while(qf>qd && Q[qd].limit < limit) qd++; if(qf==qd) return false; rt = Q[qd]; return true; } };
  • 相关阅读:
    Java 课程设计:LWZ
    回溯法解骑士巡游问题
    2021.3.30 错误2
    2021.3.29 关于上下滚动
    2021.3.28 WebView的用法
    2021.3.27 关于错误1
    2021.3.26 Python创建表
    2021.3.25 人月神话阅读笔记06
    2021.3.24 个人作业第三阶段1
    2021.3.23 个人作业第三阶段
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/5782032.html
Copyright © 2020-2023  润新知