1023 巨人排隊

2021-10-04 13:00:32 字數 1282 閱讀 2626

題目描述

巨人國的小學生放假了,老師要給小朋友們排隊了。可是這個老師有強迫症,一定要路隊上的小朋友按照身高從高到矮排序(也就是排在前面的不能比後面的矮)。小朋友呢也很調皮,一旦老師給他排好隊就不願意動了。這個時候小朋友們乙個乙個的從教室裡出來了,每個小朋友一出來老師就要給小朋友安排好位置。請問老師最少要給小朋友排幾條路隊呢?

輸入

對於每組資料,第一行乙個數n,表示小朋友總數量(1<=n<=100000)

第二行n個整數,表示小朋友身高,身高不超過30000

輸出

對於每組資料,輸出乙個整數,表示最少的路隊數

樣例輸入

8389 207 155 300 299 170 158 65

樣例輸出

2提示

最少要排兩條路隊,其中一種方案是398-207-155-65 和 300-299-170-158

思想:貪心演算法+二分法

本題類似於尋找最長上公升子串行長度,先用乙個陣列ans儲存每個隊的隊尾元素,陣列長度為index+1(下標從0開始,最少有乙個隊),且最後乙個隊尾元素ans[index]是所有隊尾元素中的最大值,當有乙個元素要來排隊時,首先判斷該元素是否大於隊尾最大值,如果大於,要另排一隊;否則可以排在前面的某一隊 的隊尾,該元素可能比前面的幾個隊隊尾元素都小,那麼選擇排在哪一隊後面呢?應按照貪心演算法選擇,將其排在最接近該元素的隊尾元素後面,這樣可以使得每一隊可以盡可能排更多元素,隊數越少。舉個栗子,當前要入隊的元素為65,有2個隊的隊尾元素分別為155,158,這時我們應該選擇將65接在較小的155後面,假設我們把65放在158後面,這時更新隊尾元素為155,65,如果再來乙個元素157,此時要另開一隊,這也是下面用二分法的理由,假設要插入的元素為x,先尋找陣列中第乙個大於等於x的數字的下標pos(該位置的數大於等於x,且最接近x),然後將該位置的數更新為x,一直更新隊尾保持陣列遞增,最後陣列長度即為最少隊數。

#include

#include

using

namespace std;

//同解法1081: 最長上公升子串行ⅱ

const

int n=

1e5+5;

intmain()

else

}printf

("%d\n"

,index+1)

;}return0;

}

巨人排隊問題

巨人國的小學生放學了,老師要給小朋友們排隊了。可是這個老師有強迫症,一定要讓路隊 上的小朋友按身高從高到矮排序。小朋友們呢也很調皮,一旦老師給他排好了隊就不願意動 了。這時候小朋友們乙個乙個從教室裡出來了,每個小朋友一出來老師就要給小朋友安排好 位置。請問老師最少要給小朋友們排幾條路隊?對於每組資料...

巨人回來了!

近期史玉柱在 上頻頻 9月21日公司又高調改名,征途網路改為巨人網路,為征途及巨人兩款網遊到美國上市造勢。巨人回來了!我對史玉柱還是相當佩服的,10年前由於巨人大廈投資失誤變成 首負 不再浮躁,沉下心來,專注於腦白金 金融投資和網遊開發,不僅還清了欠下的巨債,而且現在坐擁上百億資產。雖然很多人詬病腦...

怎麼學習巨人

聽公尺老師大概說過這麼兩句話 站在巨人的腳下創新 與 站在巨人的腳下學習並站在巨人的肩膀上創新 這兩句話是相當耐人尋味的。具體的說來,存在這麼兩種人 一種自視很厲害,在基礎技能和經驗都還比較欠缺的情況下,憑著自己的一腔熱血去進行所謂的創新與發明,結果撞的頭破血流,卻還不知所以然 一種有著明確的目標,...