zoukankan      html  css  js  c++  java
  • 模板

    一道例题,给定一串数字,求每连续k个数字的最大、最小值。

    思路:初始化一个初始长度为k的单调队列,按从左到右加入元素,同时满足这个队列中的元素是递减的(也就是假如某个数被两个距离不超过k的大于他的数夹着,他会被从队尾调出队列)。得到最大值。

    向右移动一格,假如队首离开范围,出队。往队尾加入元素前,把队尾的所有比它小的元素全部出队。

    得到新的最大值。

    #include<bits/stdc++.h>
    using namespace std;
    
    struct Monotone_Queue{
        deque<int> q;
    
        void push(int value){
            while(!q.empty()&&q.back()<value){
                q.pop_back();
            }
            q.push_back(value);
        }
    
        int front(){
            return q.front();
        }
    
        void pop(){
            q.pop_front();
        }
    };
    
    struct Monotone_Stack{
        stack<int> s;
    
        void push(int value){
            while(!s.empty()&&s.top()<value){
                s.pop();
            }
            s.push(value);
        }
    
        int top(){
            return s.top();
        }
    
        void pop(){
            s.pop();
        }
    };
  • 相关阅读:
    对bootstrap不同版本的总结
    对于前后端分离的理解
    css3笔记
    Dom
    js菜单
    css兼容问题 ie6,7
    html知识
    前端基础知识
    前端要注意的代码规范
    bootstrap常见类的总结
  • 原文地址:https://www.cnblogs.com/Yinku/p/10472977.html
Copyright © 2011-2022 走看看