zcmu 1203 逆序數(歸併排序)

2021-08-21 13:37:44 字數 827 閱讀 6081

time limit: 1 sec  memory limit: 128 mb

submit: 565  solved: 117

[submit][status][web board]

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

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

多組測試資料

每組測試資料分兩行,第一行乙個正整數n(n <= 50000)

第二行有n個元素( 0 <= a[i] <= 10^9)

每組測試資料輸出一行表示逆序數

4 2 4 3 1 3 1 1 1

4 3//歸併排序

#include#include#define maxsize 50005

int a[maxsize],b[maxsize]; //題目上雖然資料型別比較大,一開始想用long long,但是函式形參範圍太大可能會

//有錯誤,而且用int也a了,可能沒關係

int cnt;

void mergearray(int*a,int first,int last)

{

int i=first,mid=(first+last)/2;

int j=mid+1,k=first;

while(i<=mid&&j<=last)

{if(a[i]**段 小部件

[dàimǎ duàn xiǎo bùjiàn]

code section widget

歸併排序 逆序數

對於數列a,將其二分地拆分為b,c 先將b,c分別排序好,再合併b,c即為總的排序,不過在合併的過程中我們可以算出逆序數哦。其原理網上很多,我這裡不再贅述,只給出實現 include include define ll long long using namespace std ll mergeso...

逆序數(歸併排序)

分而治之 分 每次從中間劃分開,直到有序為止,即乙個整數 void merge int s,int left,int right 治重新定義乙個a陣列,儲存排序完的合併陣列,void sort int s,int left,int mid,int right while i mid a k s i ...

求逆序數 逆序數 歸併排序

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