ZOJ - 4117 BaoBao Loves Reading(树状数组求区间内不同数的个数+思维)
生活随笔
收集整理的這篇文章主要介紹了
ZOJ - 4117 BaoBao Loves Reading(树状数组求区间内不同数的个数+思维)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:點擊查看
題目大意:給出一個長度為 n 的序列,其意義為第 i 秒需要看第 a[ i ] 種書,書架上可以供應無限種書,但是書桌有容量,當書桌上的容量達到上限后,如果還想從書架上拿新書來看,就必須要從書桌上拿最早不看的那本書還回去才行,每次拿書都會記為一個操作,問當書桌的容量分別為 1 ~ n 時,看完 n 次書的最小操作次數
題目分析:首先這個題目限制了每次換書只能舍棄最早不看的那本書,所以并不是一種最優性的決策,這也大大降低了題目的難度
單獨考慮兩個相同的書的位置分別為 l 和 r,計算一下 [ l , r ] 內有多少種不同種類的書,如果這個數量 num 大于等于桌子容量的話,那么顯然在第 r 秒直接讀第 l 秒剩下的書即可,對應的,當 num 小于桌子容量的話,那么第 r 秒必須重新去書架上拿書才行
這樣一來問題就轉換為了,區間內有多少個本質不同的數的個數,又因為每次遍歷的都是一個前綴中的區間,所以可以直接維護一個樹狀數組或者線段樹來求解,對于上一段中的每個 [ l , r ] 所計算出的 num,都會使書桌容量小于?num 的答案貢獻加一,所以用差分數組統計一下就好了
代碼:
?
?
總結
以上是生活随笔為你收集整理的ZOJ - 4117 BaoBao Loves Reading(树状数组求区间内不同数的个数+思维)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZOJ - 4114 Flipping
- 下一篇: ZOJ - 4122 Triangle