51Nod 1019 逆序數 分治

2021-09-18 06:04:32 字數 996 閱讀 1652

51nod 1019 逆序數

分治法

如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。

如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。給出乙個整數序列,求該序列的逆序數。

收起

第1行:n,n為序列的長度(n <= 50000)

第2 - n + 1行:序列中的元素(0 <= a[i] <= 10^9)

輸出逆序數
424

31

4
剛拿到這個題的時候想簡單了  直接暴力破解  結果 tle  然後就懵了  (手動笑哭) 暴力的先入為主的思想揮之不去 後來又想的從後往前排序   想一想  跟暴力差不多  時間複雜度還是n方  最後想到了 歸併排序  如果 第二隊的元素入列  第一組剩餘元素個數就是第二個元素在 範圍內的逆序數  這樣就很簡單的  **也就是乙個 改進後的 歸併排序 廢話不多說  上**

#includeusing namespace std;

const int max_n = 50000+5;

int arr[max_n];

int temp[max_n];

int ans;

void slove(int left,int right)else

} //確保兩個部分所有元素都排完

while(i <= mid)

while(j <= right)

//更新序列 為下一步排序做準備

for(i = left; i <= right;i++) }}

int main()

ans = 0;

slove(0,n-1);

printf("%d\n",ans);

return 0;

}

51nod1019 逆序數 分治 歸併

逆序數 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。給出乙個整數序列,求該序列的逆序數。input 第1行 n,n為序列的長度 n ...

逆序數 51nod 1019 歸併 分治

在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。給出乙個整數序列,求該序列的逆序數。input 第1行 n,n為序列的長度 n 5000...

51nod 1019 逆序數(逆序數 離散化)

在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序數是4。給出乙個整數序列,求該序列的逆序數。input 第1行 n,n為序列的長度 n 5000...