sequence (2018山東省第九屆ACM省賽- - CSDN博客)

謹以此篇博客記錄第一次acm競賽,E題給我的印象還是比較深刻的,和隊友分析了好久才寫出來,不過幸好一遍過了。

題意:給一個由1-n組成的排列,定義ai是好數,只要存在aj(1=<j<i)使得的aj < ai;讓你必須找一個數使得去了它剩餘的好數最多,若有多個輸出小者。

思路:若考慮去掉ak ,那麼好數的數目一定不會增加的,那會減少多少哪?若ak是好數,那麼肯定會減少一個,去除ak後後面好數也可能變少。那麼是否可以O(n) 求出這個減少的值呢,答案是肯定的。

1.如何判斷一個數是否是好數? 

很簡單,從前往後枚舉,維護一個最小值,若當前值比最小值要大,ok,好數一枚。

2.如何求去掉一個數後,後面減少幾個好數?

同樣是O(n),從前往後枚舉,維護最小值和次小值,如果,當前元素位於最小值和次小值之間,那麼,說明最小值是當前數前面唯一比它小的數,所以去掉最小值會導致該數變成非好數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章