資料結構實驗之排序五 歸併求逆序數

2021-08-13 21:55:04 字數 1067 閱讀 7181

資料結構實驗之排序五:歸併求逆序數

problem description

對於數列a1,a2,a3…中的任意兩個數ai,aj (i < j),如果ai > aj,那麼我們就說這兩個數構成了乙個逆序對;在乙個數列中逆序對的總數稱之為逆序數,如數列 1 6 3 7 2 4 9中,(6,4)是乙個逆序對,同樣還有(3,2),(7,4),(6,2),(6,3)等等,你的任務是對給定的數列求出數列的逆序數。

input

輸入資料n(n <= 100000)表示數列中元素的個數,隨後輸入n個正整數,數字間以空格間隔。

output

輸出逆序數。

example input

10

10 9 8 7 6 5 4 3 2 1

example output

45
#includeusing namespace std;

long long sum;

int a[100010]; //存放元素;

int temp[100010]; //存放通過歸併排序排序後的元素;

//往temp中放入元素,並且實時更新a陣列中的元素順序,把通過用歸併排序排好的元素先放進temp中,然後再用temp給a賦值,這樣對a陣列進行更新;

void merge(int s1, int e1, int s2, int e2)

}//如果mid前面的元素數目比mid後面的元素數目少,那麼後面就剩下了很多的元素;

while(p1<=e1)

temp[p++] = a[p1++]; //這裡就是為了把後面餘下的mid前面元素放進temp中;

while(p2<=e2)

temp[p++] = a[p2++]; //這裡就是為了把後面餘下的mid後面元素放進temp中;

for(int i=s1; i<=e2; i++)

a[i] = temp[i-s1]; //用temp陣列對a陣列進行更新;

}void merge_sort(int s, int e){

int mid;

if(s

資料結構實驗之排序五 歸併求逆序數

time limit 20ms memory limit 65536k 有疑問?點這裡 對於數列a1,a2,a3 中的任意兩個數ai,aj i j 如果ai aj,那麼我們就說這兩個數構成了乙個逆序對 在乙個數列中逆序對的總數稱之為逆序數,如數列 1 6 3 7 2 4 9中,6,4 是乙個逆序對,...

資料結構實驗之排序五 歸併求逆序數

time limit 20ms memory limit 65536k 對於數列a1,a2,a3 中的任意兩個數ai,aj i j 如果ai aj,那麼我們就說這兩個數構成了乙個逆序對 在乙個數列中逆序對的總數稱之為逆序數,如數列 1 6 3 7 2 4 9中,6,4 是乙個逆序對,同樣還有 3,2...

資料結構實驗之排序五 歸併求逆序數

time limit 20ms memory limit 65536k 有疑問?點這裡 對於數列a1,a2,a3 中的任意兩個數ai,aj i j 如果ai aj,那麼我們就說這兩個數構成了乙個逆序對 在乙個數列中逆序對的總數稱之為逆序數,如數列 1 6 3 7 2 4 9中,6,4 是乙個逆序對,...