先给一下代码:
#include<iostream>
#include<stack>
using namespace std;
int n,c;
int a[100005];
stack <int> st;
int main(){
cin>>n>>c;
for(int i=1;i<=n;i++) cin>>a[i];
int cnt=0;
int j=1;
while(cnt+st.size()<n){
int xb=-1,minn=0x7f7f7f7f;
for(int i=j;i<=j+c-st.size()-1;i++){
if(a[i]<minn){
minn=a[i];
xb=i;
}
}
if(st.empty()||minn<st.top()){
for(j;j<=xb;j++){
st.push(a[j]);
}
}
cout<<st.top()<<' ';
st.pop();
cnt++;
}
while(!st.empty()){
cout<<st.top()<<" ";
st.pop();
}
return 0;
}
解释一下思路:每次看一下在栈能容纳的前提下,最小的数值是多少,并找到下标,然后比较最小数值和栈顶元素哪个小,栈顶小就不动,否则就一直入栈到那个最小的元素,最后输出栈顶元素,但是子任务1全错,子任务0有两个点错,请问是为什么