求逆序數 光影切割問題

2021-06-27 03:58:51 字數 544 閱讀 2827

《程式設計之美》第1.7節,光影切割問題。其中在最後一部分提出了求逆序數的需求,需要在o(nlogn)複雜度下計算逆序數。

演算法思想:利用歸併排序時左右陣列都已經有序了,例如左邊1,3,5,右邊2,4,6,此時,開始合併,當比較3和2時,由於3>2,因此出現了第乙個逆序數,此時,3後面的數都比2大,因此需要增加的逆序數個數就是3後面的元素個數,如果5的下標為mid,3的下標為i,那麼逆序數個數num+=mid-i+1。然後開始比較2後面的,每次遇到右邊的比左邊的數小時,就增加逆序數,當這個陣列都排序好了以後逆序數自然也就算出來了,因此複雜度和歸併排序的複雜度相同,都為o(nlogn)。

#include#include#includeusing namespace std;

int num=0;

void merge(int a,int begin,int mid,int end)

int hundrandrand()

int main()

參考:後面還有乙個用樹狀陣列求和來解的,有時間做一下。。。

光影切割問題

不少人很愛玩遊戲,例如 cs 遊戲設計也成為程式開發的熱點之一,我們假設要設計破舊倉庫之類的場景作為戰爭遊戲的背景。倉庫的地面會因為陽光從屋頂的漏洞或者視窗照射進來而形成許多光照區域和陰影區域。為了簡單起見,假設不同區域的邊界都是直線 我們把這些直線都叫做 光影線 並且不存在三條光影線相交於一點的情...

求逆序數 逆序數 歸併排序

求排列的逆序數 分治 一 題目描述 總時間限制 1000ms 記憶體限制 65536kb 描述 在internet上的搜尋引擎經常需要對資訊進行比較,比如可以通過某個人對一些事物的排名來估計他 或她 對各種不同資訊的興趣,從而實現個性化的服務。對於不同的排名結果可以用逆序來評價它們之間的差異。考慮1...

NYOJ 求逆序數

時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。現在,給你乙個n個元素的序列,請你判斷出它的逆序數是多少。比如 1 3 2 的逆序數就是...