下一个更大的元素 WA10求调




求思路

#include<bits/stdc++.h>
using namespace std;
int n,a[3000005],f[3000005];
stack<int> st;
int main(){
  scanf("%d",&n);
  for(int i=1;i<=n;i++) scanf("%d",&a[i]);
  for(int i=n;i>=1;i--){
    while(st.size()>=2&&a[st.top()]<=a[i]) st.pop();
    if(st.empty()){
      f[i]=-1;
      continue;
    }
    int tmp=st.top();
    st.pop();
    if(st.empty()) f[i]=-1;
    else if(a[st.top()]<=a[i]) f[i]=-1;
    else f[i]=st.top();
    st.push(tmp);
    st.push(i);
  }
  for(int i=1;i<=n;i++){
    if(f[i]==-1) printf("-1 ");
    else printf("%d ",a[f[i]]);
  }
  return 0;
}

等一下

先让第一个将该元素弹出栈的元素带上该元素,然后当有元素入栈时判断是否比栈顶带着的元素大,如果是那么存进答案即可(我WA60)

但有点恶心:stack<pair<vector,pair<int,int> > > s;

那你知道正解吗

你数组开太大了
图片

我是vector

额…我是直接从第一题搬过来的,但这不影响啊

而且评测机显示WA

两个单调栈不就好了。

这应该是正解

开太大了会MLE或RE(概率问题,有时候会有时候不会,这道题来说应该不会爆

图片
呃,你确定这对?
st开始不是空吗?,也没看见你往里面push啊?

跟这个没关系

不添乱…

@郭子路 你别看我的,我写的是错的

额,那你还不改改,虽然我啥都不会…

老师不是说了是两个单调栈了吗

和size啥关系…size是一个站的大小吧…我不知道…