zoukankan      html  css  js  c++  java
  • bzoj3401[Usaco2009 Mar]Look Up 仰望

    Description

    约翰的N(1≤N≤105)头奶牛站成一排,奶牛i的身高是Hi(l≤Hi≤1,000,000).现在,每只奶牛都在向左看齐.对于奶牛i,如果奶牛j满足i<j且Hi<Hj,我们可以说奶牛i可以仰望奶牛j.    求出每只奶牛离她最近的仰望对象.

    Input

     
        第1行输入N,之后每行输入一个身高.

    Output

     
        共N行,按顺序每行输出一只奶牛的最近仰望对象.如果没有仰望对象,输出0.

    Sample Input

    6
    3
    2
    6
    1
    1
    2

    Sample Output

    3
    3
    0
    6
    6
    0

    离线反向做单调栈,一直删掉栈头的数以后剩下的就是第一个比它大的

    #include<cstdio>
    #include<iostream>
    using namespace std;
    inline int read()
    {
        int x=0,f=1;char ch=getchar();
        while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
        while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
        return x*f;
    }
    int n,top;
    int a[100002];
    int ans[100002];
    int zhan[100002];
    int from[100002];
    int main()
    {
    	n=read();
    	for (int i=1;i<=n;i++)a[i]=read();
    	for (int i=n;i>=1;i--)
    	{
    		while (top&&zhan[top]<=a[i]) top--;
    		if (top) ans[i]=from[top];
    		zhan[++top]=a[i];from[top]=i;
    	}
    	for (int i=1;i<=n;i++)
    	  printf("%d
    ",ans[i]);
    }



    ——by zhber,转载请注明来源
  • 相关阅读:
    数学考试
    奇♂妙拆分
    11.25
    11.21
    11.20
    11.19
    11.18
    11.15
    11.14作业
    11.14
  • 原文地址:https://www.cnblogs.com/zhber/p/4035968.html
Copyright © 2011-2022 走看看