zoukankan      html  css  js  c++  java
  • 1531 山峰

    1531 山峰

     

    时间限制: 1 s
    空间限制: 128000 KB
    题目等级 : 钻石 Diamond
     题目描述 Description

    Rocky山脉有n个山峰,一字排开,从西向东依次编号为1, 2, 3, ……, n。每个山峰的高度都是不一样的。编号为i的山峰高度为hi。

    小修从西往东登山。每到一座山峰,她就回头观望自己走过的艰辛历程。在第i座山峰,她记录下自己回头能看到的山峰数si。

    何谓“能看到”?如果在第i座山峰,存在j<k<i,hj<hk,那么第j座山峰就是不可见的。除了不可见的山峰,其余的山峰都是可见的。

    回家之后,小修把所有的si加起来得到S作为她此次旅行快乐值。现在n座山峰的高度都提供给你了,你能计算出小修的快乐值吗?

    输入描述 Input Description

    第一行一个整数n(n<=15000)。

    第i+1(1<=i<=n)行是一个整数hi(hi<=109)。

    输出描述 Output Description

    仅一行:快乐值。

    样例输入 Sample Input

    5

    2

    1

    3

    5

    9

    样例输出 Sample Output

    5

    数据范围及提示 Data Size & Hint

    说明:s1=0, s2=1, s3=2, s4=1, s5=1。

    思路:用栈模拟登山过程,如果当前山峰的高度比栈顶元素高,
    把比这个高度小的元素删除,并加入当前的高度,说明当前高度的山峰挡住了前面所有的山峰;
    如果当前山峰的高度比栈顶的元素小,入栈,这座山峰不会遮住后面的山峰。

     1 #include<iostream>
     2 #include<stdio.h>
     3 #include<stack>
     4 using namespace std;
     5 stack<int> s;
     6 int n,x,k=0;
     7 int main()
     8 {
     9     scanf("%d",&n);
    10     s.push(1000000000);   
    11     for(int i=1;i<=n;i++) 
    12     {                  
    13         k+=s.size()-1;
    14         scanf("%d",&x);
    15         while(x>s.top()) s.pop();
    16         s.push(x);
    17     }
    18     printf("%d
    ",k);
    19     return 0;
    20 }
  • 相关阅读:
    2、容器初探
    3、二叉树:先序,中序,后序循环遍历详解
    Hebbian Learning Rule
    论文笔记 Weakly-Supervised Spatial Context Networks
    在Caffe添加Python layer详细步骤
    论文笔记 Learning to Compare Image Patches via Convolutional Neural Networks
    Deconvolution 反卷积理解
    论文笔记 Feature Pyramid Networks for Object Detection
    Caffe2 初识
    论文笔记 Densely Connected Convolutional Networks
  • 原文地址:https://www.cnblogs.com/mjtcn/p/6739309.html
Copyright © 2011-2022 走看看