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;
    }
    
  • 相关阅读:
    动态加载方法(定时任务)
    安装 asp.net core 出错
    .NET:权限管理
    关于随机数
    博客园首弹
    C# MVC从其他系统获取文件流,显示文件
    Python中操作MySQL步骤
    MySql之_增删改查
    数据库之_SQL注入
    为什么上传到youtube上的视频很模糊
  • 原文地址:https://www.cnblogs.com/czy--blog/p/13862387.html
Copyright © 2011-2022 走看看