麻烦弄好您的 markdown 排版 $\cdots$
by wdd2929 @ 2023-08-23 15:39:48
```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] ;
}
int cnt = 0 ;
a[0] = 1e6+1 ;
for( int i = n ; i >= 1 ; i -- ) {
while( a[i] >= sta[top] ) {
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 ;
}
```
by ninji @ 2023-08-23 16:08:57
@[wdd2929](/user/672940)
by ninji @ 2023-08-23 16:09:09
@[ninji](/user/927666) 哦,这问题不是我提的
by wdd2929 @ 2023-08-23 16:15:33
@[wdd2929](/user/672940) 《良好马蜂》
by ninji @ 2023-08-23 17:01:34
@[wdd2929](/user/672940)
```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 ;
int cnt = 0 ;
a[0] = 1e6+1 ;
for( int i = n ; i >= 1 ; i -- ){
while( a[i] >= sta[top] ){
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 ;
}
```
by _luo_gu @ 2023-08-23 17:02:29
@[ninji](/user/927666) 我还以为你在回答他,没事了
by wdd2929 @ 2023-08-23 17:10:45
@[_luo_gu](/user/950927) 您这个属于越界了吧
而且不太需要这些过程
```cpp
#include <bits/stdc++.h>
using namespace std ;
int n , ans[1100000] , a[1100000] ;
int main(){
scanf("%d", &n );
for( int i = 1 ; i <= n ; i ++ ){
cin >> a[i] ;
}
for( int i = n-1 ; i >= 1 ; i -- ){
j=i+1;//跟右边的比
while(a[i]>=a[j] && a[j]>0){//不行
j=ans[j];//跟它的仰望的人比
}
ans[i]=j;
}
for(int i = 1 ; i <=n ; i ++ ){
cout << ans[i]<<endl;
}
return 0 ;
}
```
by wdd2929 @ 2023-08-23 17:21:11
@[wdd2929](/user/672940) 感谢大佬
by _luo_gu @ 2023-08-23 18:04:30