玄关求解答RE on #2
查看原帖
玄关求解答RE on #2
1470997
xpigeon楼主2024/12/17 17:07

为什么别的点过了#2RE了?数组也没开小吧?不知道自己犯了什么蠢问题求神犇解答 代码

#include<bits/stdc++.h>
using namespace std;
const int MN=1e6+10;
deque<int> ma;//维护最大值的队列 
deque<int> mi;//维护最小值的队列 
int a[MN],n,k;//a[i]为第i个数的值 
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	} 
	for(int i=1;i<=n;i++){//遍历每一个数 
		if(mi.front()==i-k){//掉出区间 
			mi.pop_front();
		}
		
		while(!mi.empty() && a[i]<a[mi.back()]){//队列不为空,且第i个数优于队尾
			mi.pop_back();//这个队尾可以滚了
		}
		
		mi.push_back(i);
		if(i>=k){
			cout<<a[mi.front()]<<" ";
		}
	}
	cout<<endl;
	for(int i=1;i<=n;i++){//遍历每一个数 
		if(ma.front()==i-k){
			ma.pop_front();//掉出区间 
		}
		while(!ma.empty() && a[i]>a[ma.back()]){//队列不为空,且第i个数优于队尾 
			ma.pop_back();//这个队尾可以滚了 
		} 
		ma.push_back(i);
		if(i>=k){
			cout<<a[ma.front()]<<" ";
		}
	}
	return 0;
}
2024/12/17 17:07
加载中...