现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。
例如:
The array is [1 3 -1 -3 5 3 6 7], and k = 3.
http://oj.
代码是:

#include<iostream>
#include<cstdlib>
#include<iomanip>
using namespace std;
const int MAXN=1000000;
int a[MAXN],n,maxc[MAXN],minc[MAXN],ka;
void print(int,int);
void couta();
int main()
{
int k;
cin>>n>>k;
ka=k;
for(int i=1;i<=n;i++)
cin>>a[i];
print(1,k);
system("pause");
return 0;
}
void print(int in,int k)
{
int maxa,mina;
maxa=max(a[in],a[in+1]);
mina=min(a[in],a[in+1]);
for(int i=in;i<=k;++i)
{
int maxb,minb;
maxb=max(a[i],a[i+1]);
minb=max(a[i],a[i+1]);
if(maxb>maxa)
maxa=maxb;
if(minb<mina)
mina=minb;
}
maxc[in]=maxa;
minc[in]=mina;
int c=in+ka+1;
if(c<n)
print(in+1,k+1);
else
couta();
}
void couta()
{
int sa=n-ka;
for(int i=1;i<=sa;++i)
cout<<setw(3)<<minc[i];
cout<<endl;
for(int i=1;i<=n;++i)
cout<<setw(3)<<maxc[i];
}
#include<cstdlib>
#include<iomanip>
using namespace std;
const int MAXN=1000000;
int a[MAXN],n,maxc[MAXN],minc[MAXN],ka;
void print(int,int);
void couta();
int main()
{
int k;
cin>>n>>k;
ka=k;
for(int i=1;i<=n;i++)
cin>>a[i];
print(1,k);
system("pause");
return 0;
}
void print(int in,int k)
{
int maxa,mina;
maxa=max(a[in],a[in+1]);
mina=min(a[in],a[in+1]);
for(int i=in;i<=k;++i)
{
int maxb,minb;
maxb=max(a[i],a[i+1]);
minb=max(a[i],a[i+1]);
if(maxb>maxa)
maxa=maxb;
if(minb<mina)
mina=minb;
}
maxc[in]=maxa;
minc[in]=mina;
int c=in+ka+1;
if(c<n)
print(in+1,k+1);
else
couta();
}
void couta()
{
int sa=n-ka;
for(int i=1;i<=sa;++i)
cout<<setw(3)<<minc[i];
cout<<endl;
for(int i=1;i<=n;++i)
cout<<setw(3)<<maxc[i];
}