re第三个点,向大佬求职
查看原帖
re第三个点,向大佬求职
250013
keep_楼主2020/5/1 19:49
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;

const int maxn=1e6+1;
int a[maxn],q[maxn],k,n;
long long Q[maxn];
void minn(){
	
	int head=1;
	int tail=2;
	for(int i=1;i<=n;i++){
		while(q[head]<=i-k)
			head++;
		while(head<=(tail-1)&&a[q[tail-1]]>a[i]){
			tail--;
		}
		q[tail]=i;
		tail++;
		if(i>=k)
			cout<<a[q[head]]<<" ";
	}
}
void maxx(){
	
	int head=1;
	int tail=2;
	for(int i=1;i<=n;i++){
		while(Q[head]<=i-k)
			head++;
		while(head<=(tail-1)&&a[Q[tail-1]]<a[i]){
			tail--;
		}
		Q[tail]=i;
		tail++;
		if(i>=k)
			cout<<a[Q[head]]<<" ";
	}
}
int main(){ 
	//freopen("c.in","r",stdin);
	cin>>n;
	cin>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i];
	}
	minn();
	cout<<endl;
	maxx();
	return 0;
}
2020/5/1 19:49
加载中...