#1很玄学,下载了测试数据之后本地跑了代码,与期望输出一致。。。 #3 RE 不知所措。。。。。。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int n,k,h1=1,r1=1,h2=1,r2=1;
struct node{
int id;
ll data;
}w1[10000100],w2[10000100]; //懒得写循环队列,防越界多开了10倍的数组(虽然用不了那么大)
//w1:升序 w2:降序
ll read() //快读
{
char x=getchar();
ll res=0,f=1;
if(x=='-') f=-1;
while(x<'0'||x>'9') x=getchar();
while(x>='0'&&x<='9')
{
res=res*10+x-'0';
x=getchar();
}
return res*f;
}
vector<ll> ans1,ans2; //不知为何就是想用vector存答案
int main()
{
n=read();k=read();
int tmp;
w1[0].data=100000000000;
for(int i=1;i<=n;i++)
{
tmp=read();
//升序队列
while(i-k>=w1[h1].id) h1++;
while(tmp<w1[r1-1].data&&r1>h1) r1--;
w1[r1].data=tmp;w1[r1++].id=i;
//降序队列
while(i-k>=w2[h2].id) h2++;
while(tmp>w2[r2-1].data&&r2>h2) r2--;
w2[r2].data=tmp;w2[r2++].id=i;
//存答案
if(i>=k)
{
ans1.push_back(w1[h1].data);
ans2.push_back(w2[h2].data);
}
}
int len=ans1.size();
for(int i=0;i<len;i++) printf("%lld ",ans1[i]);
puts("");
for(int i=0;i<len;i++) printf("%lld ",ans2[i]);
}
#1 数据: 输入: 10 3 -94 21 24 73 38 77 11 73 9 -88 输出: -94 21 24 38 11 11 9 -88 24 73 73 77 77 77 73 73