树状数组 求 逆序对
生活随笔
收集整理的這篇文章主要介紹了
树状数组 求 逆序对
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
- 如何統(tǒng)計第i個數(shù)與1~第i - 1個數(shù)構(gòu)成多少個逆序?qū)δ?#xff1f;
- 考慮根據(jù)值來建樹狀數(shù)組,初始樹狀數(shù)組為全0,先按序列從左到右將數(shù)據(jù)的值對應的位置的數(shù)加一,代表又有一個數(shù)出現(xiàn)。因此,在循環(huán)到第i項時,前i-1項已經(jīng)加入到樹狀數(shù)組內(nèi)了,樹狀數(shù)組內(nèi)比ai大的都會與ai構(gòu)成逆序?qū)?#xff0c;產(chǎn)生的逆序?qū)?shù)量是i-sum(ai)
- 根據(jù)ai來建樹狀數(shù)組空間不夠誒?
- 確實不夠,但我們需要的只是元素之間的相對大小,這啟發(fā)我們對數(shù)據(jù)離散化,先將數(shù)據(jù)排序,再用1~n分別對應n個數(shù)表示它們的相對大小,對新的序列建樹狀數(shù)組空間就夠了(n≤5×10^5 )
- 相等的元素是否會導致求解錯誤?每一個數(shù)(不管是否相等)對應的新數(shù)都不同誒?
- 不處理的話會出錯的,問題的關鍵在于是否有與ai相等的元素在ai前被加入且其相對大小標記更大。出現(xiàn)這種情況就會誤將兩個相等的數(shù)判為逆序?qū)ΑT趺唇鉀Q呢,只要所有與ai相等的元素中,先出現(xiàn)的標記也更小就好了(我們只統(tǒng)計相對更大的)。具體只需要在排序時將ai作為第一關鍵字,下標(第幾個出現(xiàn))作為第二關鍵字從小到大排序即可。
總結(jié)
以上是生活随笔為你收集整理的树状数组 求 逆序对的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AcWing算法提高课 Level-3
- 下一篇: AcWing算法基础课 Level-2