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