记录编号 314207 评测结果 AAAAAAAAA
题目名称 [POJ 2823]滑动窗口 最终得分 100
用户昵称 Gravatar农场主 是否通过 通过
代码语言 C++ 运行时间 0.666 s
提交时间 2016-10-02 20:19:56 内存使用 23.18 MiB
显示代码纯文本
#include<cstdio>
#include<deque>
#include<algorithm>
#include<cmath>
#include<cstring>
#define maxn 1000000
using namespace std;
class poi{
public:
	int id,val;
};
class que{
public:
	poi s[maxn];
	int begin,end;
	void init(){
		begin=1; end=0;
	}
	bool empty(){
		return begin>end;
	}
	void push2(poi a){
		while(!empty()){
			if (s[end].val<a.val) end--;
			else break;
		}
		s[++end]=a;
	}
	void push1(poi a){
		while(!empty()){
			if (s[end].val>a.val) end--;
			else break;
		}
		s[++end]=a;
	}
	int front(int x){
		while(!empty()){
			if (s[begin].id<x) begin++;
			else break;
		}
		return s[begin].val;
	}
}minq,maxq;
poi a[maxn];
int n,k;
void read(){
	scanf("%d%d",&n,&k);
	for (int i=1;i<=n;i++){
		scanf("%d",&a[i].val);
		a[i].id=i;
	}
	minq.init();
//	int minv=1<<29;
	for(int i=1;i<=n;i++){
		minq.push1(a[i]);
		if (i<k) continue;
		printf("%d ",minq.front(i-k+1));
	}
	printf("\n");
	maxq.init();
//	int minv=1<<29;
	for(int i=1;i<=n;i++){
		maxq.push2(a[i]);
		if (i<k) continue;
		printf("%d ",maxq.front(i-k+1));
	}
}
int main(){
	freopen("window.in","r",stdin);
	freopen("window.out","w",stdout);
	read();
	return 0;
}