1 for(int i=1;i<=n;i++){ 2 while(head<=tail&&q[head]<=i-k)head++; 3 while(head<=tail&&a[q[tail]]>=a[i])tail--; 4 q[++tail]=i; 5 if(i>=k) 6 cout<<a[q[head]]<<" "; 7 }
规定先维护head,head是来描述决策是否过时的变量,在此位置的变量处于极值,tail是来描述最后一位插入时应该放的位置,添加决策用tail,取决策使用head
1 for(int i=1;i<=n;i++){ 2 while(head<=tail&&q[head]<=i-k)head++; 3 while(head<=tail&&a[q[tail]]>=a[i])tail--; 4 q[++tail]=i; 5 if(i>=k) 6 cout<<a[q[head]]<<" "; 7 }
规定先维护head,head是来描述决策是否过时的变量,在此位置的变量处于极值,tail是来描述最后一位插入时应该放的位置,添加决策用tail,取决策使用head