题目:传送门
代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000001;
int n,k,a[maxn],q[maxn],head,tail,p[maxn];
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)scanf("%d",a[i]);
head=1;tail=0;
for(int i=1;i<=n;i++){
while(head<=tail&&q[tail]<=a[i])
tail--;
q[++tail]=a[i];p[tail]=i;
while(p[head]<=i-k)
head++;
if(i>=k)printf("%d ",q[head]);
}
printf("\n");
head=1;tail=0;
for(int i=1;i<=n;i++)
{
while(head<=tail&&q[tail]>=a[i])
tail--;
q[++tail]=a[i];p[tail]=i;
while(p[head]<=i-k)
head++;
if(i>=k)printf("%d ",q[head]);
}
printf("\n");
return 0;
}
好像并没有错,但是就是RE了。
样例过不了,甚至没有输出。