首页 > 其他分享 >单调队列 维护区间最值(板子+两道练手)

单调队列 维护区间最值(板子+两道练手)

时间:2024-03-18 19:01:10浏览次数:24  
标签:练手 队列 P1886 板子 int https include 最值

1.P1886 滑动窗口 /【模板】单调队列icon-default.png?t=N7T8https://www.luogu.com.cn/problem/P1886

板子题,传送门在上方

// Problem: 
//     P1886 滑动窗口 /【模板】单调队列
//   
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P1886
// Memory Limit: 500 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<iostream>
#include<deque>
#include<vector>
using namespace std;

int main(){
	int n,m;cin>>n>>m;//板子
	deque<int> d;
	vector<int> a(n+1);
	for(int i=1;i<=n;++i) cin>>a[i];
	for(int i=1;i<=n;++i){
		while(d.size()&&a[d.back()]>a[i]) d.pop_back();///丢出大于它的,就可以维护一定区间的最小了
		d.push_back(i);
		if(i>=m){
		    while(d.size()&&d.front()<=i-m) d.pop_front();//这里注意是q.front 因为存的下标
		    cout<<a[d.front()]<<' ';
        }
	}
	cout<<endl;
	while(d.size()) d.pop_front();
	for(int i=1;i<=n;++i){
		while(d.size()&&a[d.back()]<a[i]) d.pop_back();
		d.push_back(i);
		if(i>=m){
		    while(d.size()&&d.front()<=i-m) d.pop_front();
		    cout<<a[d.front()]<<' ';
        }
	}
	cout<<endl;
	
	
	
	
	
	
	return 0;
}

P2032 扫描

P1440 求m区间内的最小值

标签:练手,队列,P1886,板子,int,https,include,最值
From: https://blog.csdn.net/why_not_fly/article/details/136665319

相关文章

  • 统计学研硕大数据统计练手06
    统计学Python练手作业06题目一、程序二、结果总结AI绘图仅供欣赏题目判断101-200之间有多少个素数,并输出所有素数。以下仅供参考,欢迎指正,共同探讨。一、程序代码如下(示例):count=0foriinrange(101,201):count=0forjinrange(2,i):#素......
  • 板子树杈
    高精度CodeconstintMAX=20000,BASE=10000;structNode{ intnumber[MAX+10],sign,length; Node(){ memset(number,0,sizeof(number)); sign=1,length=0; } voidClearZero(){ while(length>=1&&number[length]==0)--length......
  • 机器学习练手项目-猫狗分类器
    机器学习练手项目-猫狗分类器作者简介:一名后端开发人员,每天分享后端开发以及人工智能相关技术,行业前沿信息,面试宝典。座右铭:未来是不可确定的,慢慢来是最快的。个人主页:极客李华-CSDN博客合作方式:私聊+这个专栏内容:用最低价格鼓励和博主一起在寒假打卡高频大厂算法题,连续一......
  • 统计学研硕大数据统计练手03
    统计学Python练手作业03题目一、程序二、结果总结AI绘图仅供欣赏题目编写程序,该程序可以输入任意多个数,输出所有输入数据的最大值、最小值和平均值。以下仅供参考,欢迎指正,共同探讨。一、程序代码如下(示例):importnumpyasnp#调用numpy模块并命名为npco......
  • tarjan 各类板子集合
    tarjan大板子(非讲解):1、普通缩点DGAvoidtarjan(intx){ dfn[x]=low[x]=++cntp; q.push(x);v[x]=1; for(inti=head[x];i;i=bi[i].next){ intj=bi[i].to; if(!dfn[j]){ tarjan(j); low[x]=min(low[x],low[j]); } elseif(v[j])low[x]=min(low[x],dfn[j]); }......
  • tarjan板子整理
    缩点stack<int>q;voidtarjan(intu){ pre[u]=low[u]=++cnt; q.push(u); vis[u]=1; for(inti=head[u];i;i=nxt[i]) { inty=to[i]; if(!pre[y]) { tarjan(y); low[u]=min(low[u],low[y]); } elseif(vis[y]) { low[u]=min(low[u],pre[y]);......
  • 数位dp板子(待补充)
    #include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<string>#include<string.h>#include<iomanip>#include<map>#include<queue>usingnamespacestd;typedeflonglongll;......
  • 多项式板子
    不想折磨自己了,以后都来这里贺。卷积:点击查看代码polyNTT(polya,intopt){intlen=a.size();For(i,0,len-1){if(i<r[i])swap(a[i],a[r[i]]);}for(intk=1;k<len;k<<=1){llwn=qpow(((opt==1)?g:inv_g),((mod-1)/(k<<1)));for(inti......
  • 板子
    例题题目描述某个局域网内有n(n<=100)台计算机,由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路,我们知道如果局域网形成回路那么数据将不停的在回路内传输,造成网络卡的现象。因为连接计算机的网线本身不同,所以有一些连线不是很畅通,我们用f(i,j)表示i,j之间连接的畅......
  • 带权并查集板子
    以一道区间和查询来说明板子如何使用1.merge的时候只需要维护两个根节点的距离,利用的是合并时题目给的信息2.find的时候更新维护是子节点到根的距离3.需要加一个查询函数,因为距离数组是开在结构体内部的。题目描述对于一个长度为\(N\)的整数数列\(A_{1},A_{2},\cdotsA_......