A
int a[1000001];
int top=-1;//初始值为-1表示栈为空
void push(int num)
{//num 放入栈顶,top 先自增再赋值
a[++top]=num;
}
void pop()
{
printf("%d ", a[top--]);
}//top减 1实现出栈
int main(){
int n, i;
int b[1000001]={0};
int c[1000001]={0};
scanf("%d", &n);
for(i=0;i<n;i++){
scanf("%d", &b[i]);
}
int k;
k=b[n-1];
for(i=n-1;i>=0;i--){
if(k>b[i]) k=k;
else k=b[i];
c[i]=k;
}
for(i=0;i<n;i++){
push(b[i]);
while(top!=-1&&a[top]>=c[i+1]&&i!=n-1)
{//当栈不为空,栈顶元素>=下一个位置之后的最大值且不是最后一个元素时,循环出栈
pop();
}
}
while(top!=-1){
pop();
}
return 0;
◮:当栈顶元素大于等于当前位置之后的最大值时,将栈顶元素出栈
◮:
浙公网安备 33010602011771号