单调队列-滑动窗口

l=0;
 r=0;
 for (int i=1;i<=n;i++)//枚举窗口的尾巴
 {
  while(l<r && q[l]<i-k+1)l++;//踢队首已退休的节点
  while(l<r && a[i]<a[q[r-1]])r--;//踢队尾没有希望的节点
  q[r++]=i;
  if(i>=k) printf("%d ",a[q[l]]);
 }

猜你喜欢

转载自www.cnblogs.com/yangfengmz/p/9284310.html