SDUT 山峰 棧的單步呼叫

2021-08-04 06:26:16 字數 1083 閱讀 5970

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

小木示從西向東依次爬過這n個山峰,到每乙個山峰的山頂的時候,他都會往西邊眺望,並且會記錄下自己能看到的山峰的個數。

(比如說小木示 現在在4號山峰,前四號山峰的高度分別為9,4,5,1。他現在能看到的山峰個數就是2,因為第二個山峰被第三個山峰擋住了)

嚴格的來說,小木示在i位置的時候,對於乙個山峰j (j < i),如果不存在乙個山峰k滿足hj < hk (j < k < i)。則山峰j是可見的。

小木示把自己記錄的山峰的個數加和作為這次爬山的快樂值,現在給你n個山峰的高度,求小木示的快樂值。

input

多組輸入,首先輸入乙個n(1 <= n <= 10^6),表示山峰的個數。

接下來一行n個數,表示對應山峰的山峰的高度(1 <= h <= 10^6)。

output

輸出小木示的快樂值

example input

41 6 5 1

example output

4思路:

1. 假設站在第n個山上,那麼可以看到的就是從第1個山到第n-1 個山的乙個最長的下降序列,一開始的想法是用dp來做,但是沒有dp明白,學長說,這是乙個赤裸裸的單步呼叫棧的操作。

2.利用棧的思維來向,每次看山峰的時候,往前看到的是越來越高的,越往前的山峰應該越高,把他看成乙個堆疊的時候,那麼棧底的元素應該是最大的,棧頂的元素應該是最小的,現在給定一組數,先把第乙個數壓進棧裡面,從第二個數讀取開始累加 每當進行讀取操作時候,棧裡面元素的數量。(相當於前乙個狀態下,從開始到此點的下降元素的個數),然後講棧中元素從棧頂開始一次與讀取的資料比較,講比該讀取的元素數值小的全部壓出棧(對於第n+1 座山來說, 比第n座山矮的全部看不見),再講該讀取元素入棧,重複此操作。

3. cin 讀取會超市

4. 資料範圍過大, 求和應該用 long long 型別

#include #include #include #include #include using namespace std;

int main()

q.push(j);

}cout<

裸奔的bootloader單步除錯

2011 03 01 23 25 22 目地 更清晰的了解bootloader的結構及功能。為移植u boot打基礎。以前只知道大概,今天利用iar除錯工具,看著彙編 看著暫存器,看著記憶體。來單步除錯bootloader。把之前不明白的地方都搞明白。今天單步走到了初始化堆疊。主要研究了設定memo...

Pycharm的debug單步除錯

首先設定斷點,點選行號顯示的一側,在指定行設定斷點。比如這裡,我們設斷點在建立物件時 如果這時我們直接右鍵run這個 他還是會直接執行,不會理會斷點 結果 所以要右鍵選擇run下面的debug 3.這幾個紅框的意思依次是 有綠點表示程式執行中,還沒有結束 debuger視窗表示現在在debug 除錯...

python的單步除錯工具pdb

方法一 執行 python m pdb pythonname.py pdb 會自動停在第一行,等待除錯,這時你可以看看 幫助 pdb h 說明下這幾個關鍵 命令 斷點設定 pdb b 10 斷點設定在本py的第10行 或 pdb b ots.py 20 斷點設定到 ots.py第20行 刪除斷點 p...