比赛 Segment Tree Competition 评测结果 AAAAAAAAA
题目名称 滑动窗口 最终得分 100
用户昵称 Ostmbh 运行时间 2.894 s
代码语言 C++ 内存使用 30.80 MiB
提交时间 2016-08-28 21:25:37
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAX=1000000 + 10;
int A[MAX];
int maxx[MAX*4],minn[MAX*4];
int ql,qr;
const int INF=0x7fffffff;
void update(int o,int L,int R){
	int M=(L+R)>>1;
	if(L==R){
		minn[o]=A[L];
		maxx[o]=A[L];
	}
	else {
		update(o*2,L,M);
		update(o*2+1,M+1,R);
		minn[o]=min(minn[o*2],minn[o*2+1]);
		maxx[o]=max(maxx[o*2],maxx[o*2+1]);
	}
}
int minq(int o,int L,int R){
	int M=(L+R)>>1,ans=INF;
	if(ql<=L&&qr>=R)
		return minn[o];
	if(ql<=M)
		ans=min(ans,minq(o*2,L,M));
	if(qr>M)
		ans=min(ans,minq(o*2+1,M+1,R));
	return ans;
}
int maxq(int o,int L,int R){
	int M=(L+R)>>1,ans=0;
	if(ql<=L&&qr>=R)
		return maxx[o];
	if(ql<=M)
		ans=max(ans,maxq(o*2,L,M));
	if(qr>M)
		ans=max(ans,maxq(o*2+1,M+1,R));
	return ans;
}
int read(){
	int x=0,f=1;
	char c=getchar();
	while(!(c>='0'&&c<='9')){
		if(c=='-')
			f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*f;
}
int main(){
	freopen("window.in","r",stdin);
	freopen("window.out","w",stdout);
	int n,k;
	n=read();
	k=read();
	for(int i=1;i<=n;i++)
		A[i]=read();
	update(1,1,n);
	for(int j=k;j<=n;j++){
		ql=j-k+1,qr=j;
		cout<<minq(1,1,n)<<' ';
	}
	cout<<endl;
	for(int j=k;j<=n;j++){
		ql=j-k+1,qr=j;
		cout<<maxq(1,1,n)<<' ';
	}
	cout<<endl;
return 0;
}