题解 | #Look Up#

Look Up

https://ac.nowcoder.com/acm/problem/24840

类似于滑动窗口,但比滑动窗口要简单。在本题中因为是向坐看(其实是向高下标的方向看)。所以从后向前去遍历,如果栈为空那么直接加入即可,如果当前的数比栈顶的数要大,那么栈顶里面的数不可能成为那个被仰望的了,所以弹出,又因为可能不止一个,所以用循环。如果比栈顶数要小证明还有可能称为那个背仰望的,接着加入栈中就可以了。
#include <bits/stdc++.h>


using namespace std;
const int maxn = 100000+10;
stack<int> st;
int N;
int a[maxn];
int ans[maxn];

int main() {
    cin>>N;
    for (int i=1;i<=N;i++) {
        cin>>a[i];
    }
    for (int i=N;i>=1;i--) {
        while (!st.empty() && a[st.top()]<=a[i]) {
            st.pop();
        }
        if (st.empty()) {
            ans[i] = 0;
        } else {
            ans[i] = st.top();
        }
        st.push(i);
    }
    for (int i=1;i<=N;i++) {
        cout<<ans[i]<<endl;
    }
    return 0;
}


全部评论

相关推荐

Beeee0927:是缅甸园区吗
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
今天 14:00
点赞 评论 收藏
分享
小浪_Coding:找硬件测试,也可兼顾软测欧, 简历还可以的 ,注意排版,项目写的有条理一点, 然后个人技能多加点, 润色好简历之后就开始沟通海投了,深圳,东莞这边做硬件相关的公司还不少, 医疗类,仪器类的都可以尝试
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务