代码:```cpp
#include <bits/stdc++.h>
using namespace std ;
int n , ans[1100000] , sta[1100000] , a[1100000] , top ;
int main(){
scanf("%d" , &n );
for( int i = 1 ; i <= n ; i ++ ){
cin >> a[i] ;
}
//按下标倒序将数据放到降序栈里面
top = 0 ;
//问题似乎是top的初始值导致了非法访问,但是改成1依旧不影响继续出问题
int cnt = 0 ;
a[0] = 1e6+1 ;
//本来是想让栈的零号位是极大值的,但是打错了.后来改成栈的极大值的时候就输出了一串零
for( int i = n ; i >= 1 ; i -- ){
while( a[i] >= sta[top] ){//如果栈中最后一个值不配被ai瞻仰,就把他弹出
top -- ;
}
ans[i] = sta[top-1] ;
if( top == 0 ){
//如果这个牛最高或者这个牛是栈中最高的牛
ans[i] = 0 ;
}
top ++ ;
sta[top] = a[i] ;
}
//输出
for(int i = 1 ; i <=n ; i ++ ){
cout << ans[i]<<endl;
}
return 0 ;
}
样例的前两个数也许非法访问了,输出的随机数,后面的几个数都是对的,
感谢大佬,好人一生平安!