[BZOJ3401][Usaco2009 Mar]Look Up 仰望(单调栈)

来源:互联网 发布:澳洲导航软件 编辑:程序博客网 时间:2024/04/26 23:28

题目描述

传送门

题解

单调栈裸题。
维护单调递减的栈,每一个点的右边只会被第一个 比它大的点更新。

代码

#include<iostream>#include<cstring>#include<cstdio>using namespace std;#define N 100005int n,top;int stack[N],h[N],r[N];void push(int x){    while (top&&h[stack[top]]<h[x])    {        r[stack[top-1]]=r[stack[top]];        --top;    }    stack[++top]=x;}int main(){    scanf("%d",&n);    for (int i=1;i<=n;++i) scanf("%d",&h[i]),r[i]=i;    for (int i=1;i<=n;++i) push(i);    while (top)    {        r[stack[top-1]]=r[stack[top]];        --top;    }    for (int i=1;i<=n;++i)    {        if (r[i]!=n) printf("%d\n",r[i]+1);        else puts("0");    }}
0 0
原创粉丝点击