程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CODEVS-1531 山峰

CODEVS-1531 山峰

編輯:C++入門知識

CODEVS-1531 山峰


題目描述 Description

Rocky山脈有n個山峰,一字排開,從西向東依次編號為1, 2, 3, ……, n。每個山峰的高度都是不一樣的。編號為i的山峰高度為hi。

小修從西往東登山。每到一座山峰,她就回頭觀望自己走過的艱辛歷程。在第i座山峰,她記錄下自己回頭能看到的山峰數si。

何謂“能看到”?如果在第i座山峰,存在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。

http://codevs.cn/problem/153

用棧來維護當前點的si值,棧中保存的是一個遞增的序列。

/*
作者:NowAndForever
題目:p1531 山峰
*/
#include
#include
using namespace std;
int main()
{
    int n,i,x,k=0;
    stacks;
    scanf("%d",&n);
    s.push(1000000000); //先壓入一個最大值。好處在於棧永遠不為空,並且每個點的快樂值除了第一個點之外都是1
    for(i=1;i<=n;i++) //每次輸入的值對當前這個點的快樂值沒有影響,當前點的快樂值是棧的所保存的數量。
    {                  //並且棧中需要維護一個遞增的序列,
        k+=s.size()-1;
        scanf("%d",&x); //比如說第一個數為1,第二個數為2,那第一個數就被擋住了,如果第一個數字為2,第2個數字也1,那麼就都壓入棧。
        while(x>s.top()) s.pop();
        s.push(x);
    }
    printf("%d\n",k);
    return 0;
}


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved