蒟蒻过不了样例求助,实在不明白为啥会这样

P2947 [USACO09MAR] Look Up S

麻烦弄好您的 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


|