单调队列
#include<iostream>
using namespace std;
int a[10001],q[1001];//a存数,b存队列数的下标
int main()
{
int n,k,l=1,r=0,i;
cin>>n>>k;//l队首位置,r队尾位置
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)//i为新加入的数的下标
{
if(q[l]==i-k)l++;//如果最大数为第一项,则删除
for(;a[i]>=a[q[r]]&&r>=l;r--);
q[++r]=i;// 将单调队列末尾比 a(k+l)小的项全部删除,队尾放入a(k+l)
if(i>k)cout<<a[q[l]]<<endl;//队首即为当前段的最大数
}
return 0;
}
向上取整
a=(b+k-1)/k;