時間限制:
2000 ms | 記憶體限制:
65535 kb
難度:5 描述
在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。
現在,給你乙個n個元素的序列,請你判斷出它的逆序數是多少。
比如 1 3 2 的逆序數就是1。
輸入
第一行輸入乙個整數t表示測試資料的組數(1<=t<=5)
每組測試資料的每一行是乙個整數n表示數列中共有n個元素(2〈=n〈=1000000)
隨後的一行共有n個整數ai(0<=ai<1000000000),表示數列中的所有元素。
資料保證在多組測試資料中,多於10萬個數的測試資料最多只有一組。
輸出輸出該數列的逆序數
樣例輸入
221 1
31 3 2
樣例輸出
01
**[張云聰]原創
上傳者
張云聰題目給的是一百萬暴力肯定是超時的
用歸併排序簡直完美(量身定做)
知道歸併排序應該很容易加個記數就ok了(nlogn)用線段樹也能
但是要離散化 題目沒說輸入的數連續 8 1 3 5 -> 4 1 2 3
#includeint a[1000010],temp[1000010];
long long ans;
void merarray(int l,int mid,int r)
}while(i<=mid)
temp[k++]=a[i++];
while(j<=r)
temp[k++]=a[j++];
for(i=0; i>1;
mersort(l,mid);
mersort(mid+1,r);
merarray(l,mid,r);
}}int main()
return 0;
}
nyoj117求逆序數
時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。現在,給你乙個n個元素的序列,請你判斷出它的逆序數是多少。比如 1 3 2 的逆序數就...
nyoj117 求逆序數
時間限制 2000 ms 記憶體限制 65535 kb 難度 5 描述在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。現在,給你乙個n個元素的序列,請你判斷出它的逆序數是多少。比如 1 3 2 的逆序數就是...
nyoj 117 歸併求逆序數
花了一晚上和上午的時間終於除錯出來了,一開始沒有考慮到存在相等數字的情況 這裡有必要對歸併排序進行總結。分為分治三步法 1.劃分問題 把序列分成元素個數盡量相等的兩半 2.遞迴求解 把兩半元素分別排序 3.合併問題 把兩個有序表合併成乙個 此題求逆序中的第二步就是統計i,j均在左邊或者均在右邊的逆序...