单调队列维护合法性的这里为什么都写的while,if也可以啊

P1886 滑动窗口 /【模板】单调队列

mot1ve @ 2023-04-04 17:21:32

为什么很多人写的是while(q1.size()&&q1.front()+k<=i)?因为是从1-i遍历的,如果不合法了一定会被这一次清除掉啊,怎么可能一次清除很多个呢?我认为if完全可以。

if(i>=k)
{
    if(q1.size()&&q1.front()+k<=i)
    {
        q1.pop_front();
    }
    printf("%d ",a[q1.front()]);
}

by operator_ @ 2023-04-04 18:13:49

在这一题的确是正确的,但因为是模板,会有很多人写比较万能的写法吧(纯猜测)


|