[WOJ1583]向右看齐

题目链接:

WOJ1583

题目分析:

大水题……我就来水个题解
倒序扫,单调栈维护单减序列,每个对象的答案是栈里它下面那个元素


代码:

#include<bits/stdc++.h>
#define MAXN (1000000+5)
using namespace std;
inline int read(){
    int cnt=0,f=1;char c;
    c=getchar();
    while(!isdigit(c)){
        if(c=='-')f=-f;
        c=getchar();
    }
    while(isdigit(c)){
        cnt=cnt*10+c-'0';
        c=getchar();
    }
    return cnt*f;
}
int n,sta[MAXN],a[MAXN],top=0;
int ans[MAXN];
int main(){
    n=read();
    for(register int i=1;i<=n;i++)a[i]=read();
    for(register int i=n;i>=1;--i){
        while(a[sta[top]]<=a[i]&&top)top--;
        sta[++top]=i;
        if(top==0)ans[i]=0;
        else
        ans[i]=sta[top-1];
    }
    for(register int i=1;i<=n;i++)printf("%d\n",ans[i]);
    return 0;
}

转载于:https://www.cnblogs.com/kma093/p/10293325.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值