90分,只有第二个点wa了,不清楚为什么
  • 板块学术版
  • 楼主lsuntouched
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/18 18:31
  • 上次更新2024/7/18 19:23:49
查看原帖
90分,只有第二个点wa了,不清楚为什么
1367273
lsuntouched楼主2024/7/18 18:31
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n,k;
int head=0,tail=0;
struct node{
	ll num;
	ll value;
};
node orgin[1000010],p[1000010];
void _min(ll a){
	if(a-p[head+1].num==k){
		head++;
	}
	while(tail>=head+1 and p[tail].value>orgin[a].value){
		p[tail].value=0;
		p[tail].num=0;
		tail--;
	}
	tail++;
	p[tail]=orgin[a];
//	for(int i=head+1;i<=tail;i++){
//		cout<<p[i].value<<" ";
//	}
//	cout<<endl;
	if(a>=k) cout<<p[head+1].value<<" ";
}
void _max(ll a){
	if(a-p[head+1].num==k){
		head++;
	}
	while(tail>=head+1 and p[tail].value<orgin[a].value){
		p[tail].value=0;
		p[tail].num=0;
		tail--;
	}
	tail++;
	p[tail]=orgin[a];
//	for(int i=head+1;i<=tail;i++){
//		cout<<p[i].value<<" ";
//	}
//	cout<<endl;
	if(a>=k) cout<<p[head+1].value<<" ";
}
int main()
{	
	cin>>n>>k;
	for(ll i=1;i<=n;i++){
		scanf("%ld",&orgin[i].value);
		orgin[i].num=i;
	}
	for(ll i=1;i<=n;i++){
		_min(i);
	}
	cout<<endl;
	head=0;tail=1;
	for(ll i=1;i<=n;i++){
		_max(i);
	}
	return 0;
}

2024/7/18 18:31
加载中...