单调队列模板
void letin(int x) {
if(l > r) { que[++r].first = a[x]; que[r].second = x; return ; }
while(a[x] < que[r].first && r >= l) r --;
que[++r].first = a[x]; que[r].second = x;
while(x - que[l].second + 1 > m) l ++;
}
前三行的意思是队尾没你强且没你年轻就出队,然后你入队。
最后一行的意思是如果队首太老老到不符合要求了就出队。

浙公网安备 33010602011771号