不懂就问 回答必关
查看原帖
不懂就问 回答必关
1295276
miyachn楼主2025/2/2 14:53
#include<bits/stdc++.h>
using namespace std;
const int N=1000009;
int n,k,a[N];
int q[N],head,tail,p[N];
int main(){
    cin>>n>>k;
	for(int i=1;i<=n;i++) cin>>a[i];
	head=1,tail=0;
	for(int i=1;i<=n;i++){
		while(head<=tail&&q[tail]>=a[i]) //①
			tail--;
		q[++tail]=a[i],p[tail]=i;
		while(p[head]<=i-k) head++;
		if(i>=k) cout<<q[head]<<" ";
	}
	cout<<endl;
	memset(q,0,sizeof(q));
	memset(p,0,sizeof(p));
	head=1,tail=0;
	for(int i=1;i<=n;i++){
		while(head<=tail&&q[tail]<=a[i]) //②
			tail--;
		q[++tail]=a[i],p[tail]=i;
		while(p[head]<=i-k) head++;
		if(i>=k) cout<<q[head]<<" ";
	}
    return 0;
}

①和②的head<=tail中为什么不能把等于号去掉?QAQ

2025/2/2 14:53
加载中...