#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int q[maxn],k,n,a[maxn],p[maxn];
void solve(){
int head=1,tail=0;
memset(q,0,sizeof(q));
for(int i=1;i<=n;i++){
while(head<=tail&&a[i]>=q[tail]) tail--;
q[++tail]=a[i];
p[tail]=i;
while(p[head]<=i-k) head++;
if(i>=k) printf("%d ",q[head]);
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
solve();
}
上面的是正确代码,求最大值的
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int q[maxn],k,n,a[maxn],p[maxn];
void solve(){
int head=1,tail=0;
memset(q,0,sizeof(q));
for(int i=1;i<=n;i++){
while(head<=tail&&a[i]>=q[tail]) tail--;
q[++tail]=a[i];
while(head<=i-k) head++;
if(i>=k) printf("%d ",q[head]);
}
}
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
solve();
}
这是我的代码,没有用p数组存储tail的下标,因为我感觉tail本身就是一个编号一样的东西,比如tail=7就证明tail现在在7号位置,请问我的想法错在哪里