zoukankan      html  css  js  c++  java
  • [笔记]单调队列

    单调队列的定义与单调栈的定义基本相同,只是在使用的时候可以支持双端队列

    模板题

    这个题的思路很简单,但是实现起来并不好写.

    总结概括起来就是:求最大值时,维护一个单调递减的队列,队首的元素就是答案,如果遇到了一个比队尾元素大的就从队尾开始弹出元素,直到队列为空或者队列中的一个元素比当前元素大.求最小值也是同理.看看代码就更好理解些.

    PS:与单调栈相同地都是维护下标而不是直接维护权值

    #include <bits/stdc++.h>
    using namespace std;
    int n,k;
    int a[1000010];
    deque < int > maxx,minn;
    int main(){
    	scanf("%d%d",&n,&k);
    	for(int i = 1;i <= n;i++)
    		scanf("%d",&a[i]);
    	for(int i = 1;i <= n;i++){
    		while(!minn.empty() && minn.front() <= i - k)minn.pop_front();
    		while(!minn.empty() && a[minn.back()] > a[i])minn.pop_back();
    		minn.push_back(i);
    		if(i >= k)printf("%d ",a[minn.front()]);
    	}
    	printf("
    ");
    	for(int i = 1;i <= n;i++){
    		while(!maxx.empty() && maxx.front() <= i - k)maxx.pop_front();
    		while(!maxx.empty() && a[i] > a[maxx.back()])maxx.pop_back();
    		maxx.push_back(i);
    		if(i >= k)printf("%d ",a[maxx.front()]);
    	}
    	printf("
    ");
    	return 0;
    }
    
  • 相关阅读:
    postman接口测试工具
    fiddler如何做弱网测试
    支付的测试点
    公交卡测试点
    http的请求方式及http和https的区别
    百度输入框测试点
    ADB常用命令
    Python 操作注册表
    App测试流程及测试点
    python3.7 打包成exe的一种方法 pyinstaller
  • 原文地址:https://www.cnblogs.com/czy--blog/p/13862387.html
Copyright © 2011-2022 走看看