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;

◮:当栈顶元素大于等于当前位置之后的最大值时,将栈顶元素出栈

◮:

posted @ 2025-08-21 21:29  ervgiu28hg34y827  阅读(4)  评论(0)    收藏  举报