q[++t]=i 的执行过程如下:
- 首先,t 的值会先自增 1。
- 然后,新值 i 被赋给 q[t],即元素 i 被插入到数组 q 的下标为 t 的位置上。
q[t++]=i 的执行过程如下:
- 首先,i 的值被赋给 q[t],即元素 i 被插入到数组 q 的下标为 t 的位置上。
- 然后,t 的值再自增 1。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i,h=1,t=0,k;
cin>>n;
int a[n+1],q[n+1];
for(i=1;i<=n;i++)
cin>>a[i];
cin>>k;
//这题不同于基础的滑动窗口,每个序号都要输出最小值,
//一个滑动窗口2k+1,就要输出2k+1个最小值,所以要让这个数组变长
for(i=1;i<=n+k;i++){i<=n+k结合下面i>k
if(i<=n){n后面就超限了
while(h<=t&&a[q[t]]>=a[i])
t--;考虑到t<0
q[++t]=i;}所以这里是++t
if(i-k*2>q[h]) h++; //输满2k+1,才能让头出去 i-(2k+1)+1 ,2k+1是窗口大小
if(i>k) {例如序号为1的时候,0不存在,判断1和2最小
cout<<a[q[h]]<<" ";
例子 从序号2开始输出5个数。正好i<=n+k
5 2 7 4 3
1
} }
return 0;}