比赛 Segment Tree Competition 评测结果 AAAAAAAAA
题目名称 滑动窗口 最终得分 100
用户昵称 森林 运行时间 2.371 s
代码语言 C++ 内存使用 30.83 MiB
提交时间 2016-08-28 19:19:24
显示代码纯文本
#include<iostream>
#include<stdio.h>
#define fastcall __attribute__((optimize("-O3")))
#define mid ((l+r)>>1)
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
using namespace std;
const int maxn=1000010;
int t_max[maxn<<2]={0},t_min[maxn<<2]={0},n,k;
template<typename T>fastcall inline void QR(T& x){
	char ch;bool f=0;
	while(ch=getchar(),(ch<'0'||ch>'9')&&ch!='-');
	if(ch=='-')f=1,ch=getchar();x=ch-48;
	while(ch=getchar(),ch>='0'&&ch<='9')x=x*10+ch-48;if(f)x=-x;
}
fastcall inline void build(int rt,int l,int r){
	if(l==r){
		QR(t_min[rt]);
		t_max[rt]=t_min[rt];
		return;
	}
	build(lson);
	build(rson);
	t_max[rt]=max(t_max[rt<<1],t_max[rt<<1|1]);
	t_min[rt]=min(t_min[rt<<1],t_min[rt<<1|1]);
}
int ql,qr,res;
fastcall void query_max(int rt,int l,int r){
	if(ql<=l&&r<=qr){
		res=max(res,t_max[rt]);
		return;
	}
	if(ql<=mid)query_max(lson);
	if(mid<qr)query_max(rson);
}
fastcall int query_max(int l,int r){
	ql=l,qr=r,res=0;
	query_max(1,1,n);
	return res;
}
fastcall void query_min(int rt,int l,int r){
	if(ql<=l&&r<=qr){
		res=min(res,t_min[rt]);
		return;
	}
	if(ql<=mid)query_min(lson);
	if(mid<qr)query_min(rson);
}
fastcall int query_min(int l,int r){
	ql=l,qr=r,res=0x7fffffff;
	query_min(1,1,n);
	return res;
}
int main(){
	freopen("window.in","r",stdin);
	freopen("window.out","w",stdout);
	QR(n),QR(k);
	build(1,1,n);
	for(int i=1;i<=n-k+1;i++)printf("%d ",query_min(i,i+k-1));putchar('\n');
	for(int i=1;i<=n-k+1;i++)printf("%d ",query_max(i,i+k-1));putchar('\n');
	fclose(stdin);
	fclose(stdout);
	return 0;
}