记录编号 466482 评测结果 AAAAAAAAA
题目名称 [POJ 2823]滑动窗口 最终得分 100
用户昵称 Gravatar+1s 是否通过 通过
代码语言 C++ 运行时间 5.234 s
提交时间 2017-10-29 09:12:46 内存使用 232.99 MiB
显示代码纯文本
#include<cstdio>
#include<cmath>
int n,k,arr[1000010],stbmx[1200010][25],stbmi[1200010][25];
int K2MnO4()
{
	for(int i=1;i<=n;i++)stbmx[i][0]=arr[i];
	for(int i=1;i<=n;i++)stbmi[i][0]=arr[i];
	return 0;
}
int MnO2()
{
	for(int j=1;j<log(n)/log(2);j++)
	for(int i=1;i<=n;i++)
	stbmx[i][j]=stbmx[i][j-1]>stbmx[i+(int)pow(2,j-1)][j-1]?stbmx[i][j-1]:stbmx[i+(int)pow(2,j-1)][j-1];
	return 0;
}
int O2()
{
	for(int j=1;j<=log(n)/log(2);j++)
	for(int i=1;i<=n;i++)
	stbmi[i][j]=stbmi[i][j-1]<stbmi[i+(int)pow(2,j-1)][j-1]?stbmi[i][j-1]:stbmi[i+(int)pow(2,j-1)][j-1];
	return 0;
}
int qrymx(int l,int r)
{
	int le=log(k)/log(2);
	int _=stbmx[l][le];
	int D=stbmx[r-(int)pow(2,le)+1][le];
	return _>D?_:D;
}
int qrymi(int l,int r)
{
	int le=log(k)/log(2);
	int _=stbmi[l][le];
	int D=stbmi[r-(int)pow(2,le)+1][le];
	return _<D?_:D;
}
int main()
{
	freopen("window.in","r",stdin);
	freopen("window.out","w",stdout);
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++)scanf("%d",&arr[i]);
	int KMnO4=K2MnO4()+MnO2()+O2();
	for(int i=1;i<=n-k+1;i++)printf("%d ",qrymi(i,i+k-1));
	printf("\n");
	for(int i=1;i<=n-k+1;i++)printf("%d ",qrymx(i,i+k-1));
	return 0;
}