雙端佇列

最爱丁珰發表於2024-04-10

這裡對做法補充一下

首先肯定有兩個考慮物件嘛,考慮雙端佇列或者考慮數值,既然雙端佇列是不好考慮的(指正著想),那就考慮數值嘍(反著想,最終的序列一定是確定的)

然後是一個證明,其實我自己的排序方法是一個數一個數看的,對於當前迴圈到的數,比如處於遞減狀態,我們考慮這個數所有的下標,把能接在後面的就接在後面

比如,上一個下標是\(3\),然後處於遞減狀態,當前區間還剩下的數是\(1,2,4,5\),那麼我們就排成\(2,1,4,5\)

這裡用決策包容性證明,貪心策略相當於是(以遞減為例)當前區間剩下的數中小於上一個數的最大的數\(x\)接在上一個數\(y\)的後面

如果不這樣,那麼考慮這個\(x\),肯定是要被放在某個雙端佇列的裡面的,無論在這個雙端佇列裡面是開頭還是非開頭,我們都將\(x\)拿出來,這個雙端佇列顯然也合法,然後將\(x\)放在\(y\)的後面,顯然也是合法的,而且雙端佇列的個數不會增加,證畢

相關文章