題目大意:給出一個長度為 n 的序列,其意義為第 i 秒需要看第 a[ i ] 種書,書架上可以供應(yīng)無限種書,但是書桌有容量,當(dāng)書桌上的容量達(dá)到上限后,如果還想從書架上拿新書來看,就必須要從書桌上拿最早不看的那本書還回去才行,每次拿書都會記為一個操作,問當(dāng)書桌的容量分別為 1 ~ n 時,看完 n 次書的最小操作次數(shù)
單獨(dú)考慮兩個相同的書的位置分別為 l 和 r,計算一下 [ l , r ] 內(nèi)有多少種不同種類的書,如果這個數(shù)量 num 大于等于桌子容量的話,那么顯然在第 r 秒直接讀第 l 秒剩下的書即可,對應(yīng)的,當(dāng) num 小于桌子容量的話,那么第 r 秒必須重新去書架上拿書才行
這樣一來問題就轉(zhuǎn)換為了,區(qū)間內(nèi)有多少個本質(zhì)不同的數(shù)的個數(shù),又因為每次遍歷的都是一個前綴中的區(qū)間,所以可以直接維護(hù)一個樹狀數(shù)組或者線段樹來求解,對于上一段中的每個 [ l , r ] 所計算出的 num,都會使書桌容量小于?num 的答案貢獻(xiàn)加一,所以用差分?jǐn)?shù)組統(tǒng)計一下就好了