MY(一名蒟蒻) @ 2020-08-25 11:46:36
code
水样例过了,自己造了组数据
input:
15 6
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
输出了
0 0 0 0 0 0 0 0 0 0
15 0 0 0 0 0 0 0 0 0
自己找了一个上午的错,真的不知道错哪里。谢谢各位大佬!
by Eric_Xian @ 2020-08-25 11:55:15
前排
by JK_LOVER @ 2020-08-25 14:08:29
@MY(一名蒟蒻)||
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e6+10;
int minl=1,minr,maxl=1,maxr,n,k,ans[2][N];
struct node {int t,num;};
node minq[N],maxq[N];
void push(int &head,int &tail,node q[],const node &x,const int f)
{
if(f) while(head <= tail && x.num >= q[tail].num) tail--;
else while(head <= tail && x.num <= q[tail].num) tail--;
if(tail-k == head) head++;
q[++tail].num=x.num;
q[tail].t=x.t;
while(head <= tail && q[tail].t-k >= q[head].t) head++;
return ;
}
int main()
{
// freopen("work.in","r",stdin);freopen("work.out","w",stdout);
scanf("%d%d",&n,&k);
node a;
for(int i=1;i<=n;i++)
{
scanf("%d",&a.num);
a.t=i;
push(minl,minr,minq,a,0);
push(maxl,maxr,maxq,a,1);
ans[0][i]=minq[minl].num;
ans[1][i]=maxq[maxl].num;
}
for(int i=k;i<=n;i++) printf("%d ",ans[0][i]);
puts("");
for(int i=k;i<=n;i++) printf("%d ",ans[1][i]);
return 0;
}
by JK_LOVER @ 2020-08-25 14:09:04
@MY(一名蒟蒻) ||数组下标,应该为
by MY(一名蒟蒻) @ 2020-08-25 14:16:39
@JK_LOVER 啊这,以后真是要好好注意一下了
by MY(一名蒟蒻) @ 2020-08-25 14:19:36
@JK_LOVER 谢谢!