[C++] 封装了个...滑动窗口

#include<bits/stdc++.h>
using namespace std;
class MMMW{
	public:
		deque<int> d1,d2;
		int a[1001],k;
		void out1(int id){
			if(!d1.empty()&&d1.front()==id){
				d1.pop_front();
			}
		}
		void push1(int id){
			while(!d1.empty()&&a[d1.back()]<a[id]){
				d1.pop_back();
			}
			d1.push_back(id);
		}
		void out2(int id){
			if(!d2.empty()&&d2.front()==id){
				d2.pop_front();
			}
		}
		void push2(int id){
			while(!d2.empty()&&a[d2.back()]>a[id]){
				d2.pop_back();
			}
			d2.push_back(id);
		}
		void out(int id){
			out1(id);
			out2(id);
		}
		void push(int id){
			push1(id);
			push2(id);
		}
		int max(){
			return a[d1.front()];
		}
		int min(){
			return a[d2.front()];
		}
};

滑动窗口模板题AC示例

MMMW m;
int main(){
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;++i){
		cin>>m.a[i];
	}
	for(int i=1;i<=k-1;++i){
		m.push(i);
	}
	for(int i=k;i<=n;++i){
		m.out2(i-k);
		m.push2(i);
		cout<<m.min()<<" ";
	}
	cout<<endl;
	for(int i=k;i<=n;++i){
		m.out1(i-k);
		m.push1(i);
		cout<<m.max()<<" ";
	}
}
posted @   HaneDaniko  阅读(26)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示