資料結構實驗之排序五:歸併求逆序數
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
1010 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 是乙個逆序對,...