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;
    }
    
  • 相关阅读:
    利用google kaptcha完成登陆动态验证码
    Linux和Windows环境下安装Nginx
    将图片设定为固定大小
    将xls格式的Excel转换成图片
    将pdf格式的文件转换成图片
    SSH连接工具类
    java判断ip内外网
    jenkins安装与使用
    Eclipse快捷键大全
    serialVersionUID的作用
  • 原文地址:https://www.cnblogs.com/czy--blog/p/13862387.html
Copyright © 2011-2022 走看看