hh=1, tt=0;
for (int i=1; i<=n; i++)
{
while (hh<=tt && q[hh]<i-k+1) hh++;
while (hh<=tt && a[q[tt]]>a[i]) tt--;
q[++tt]=i;
if (i>=k) printf("%d ", a[q[hh]]);
}
puts("");
这是一个板子。
队头和队尾初始化应该有讲究吧?我测试了一下发现,队尾初始化的值不一定要是队头的值减一。即 tt=hh 也行而不是一定要求 tt=hh-1。
但是,如果 tt=hh,下一次加入元素 i 的时候,会多出来一个 0,这里多出的 0 不会有影响吗?