求逆序數
時間限制:
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
1//可以直接雙重for迴圈
2 #include3 #include4 #include5
#define n 1000010
6using
namespace
std;
7long
long
ans;
8int
a[n];910
void merge(int s1,int e1,int s2,int
e2)11
22else
2328}29
while(p1<=e1) temp[p++]=a[p1++];
30while(p2<=e2) temp[p++]=a[p2++];
31int
i;32
for(i=s1;i<=e2;i++) a[i]=temp[i-s1];
33delete temp;34}
3536
void merge_sort(int s,int
e)3746}
4748
intmain()
4962 }
歸併法排序求逆序數
歸併排序 merge sort,台灣譯作 合併排序 是建立在歸併操作上的一種有效的 排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。歸併操作 merge 也叫歸併演算法,指的是將兩個已經排序的序列合併成乙個序列的操作。歸併排序演算法依賴歸併操作。歸併操作...
歸併 求逆序數
考慮1,2,n n 100000 的排列i1,i2,in,如果其中存在j,k,滿足 j k 且 ij ik,那麼就稱 ij,ik 是這個排列的乙個逆序。乙個排列含有逆序的個數稱為這個排列的逆序數。例如排列 263451 含有8個 逆序 2,1 6,3 6,4 6,5 6,1 3,1 4,1 5,1 ...
求逆序數 逆序數 歸併排序
求排列的逆序數 分治 一 題目描述 總時間限制 1000ms 記憶體限制 65536kb 描述 在internet上的搜尋引擎經常需要對資訊進行比較,比如可以通過某個人對一些事物的排名來估計他 或她 對各種不同資訊的興趣,從而實現個性化的服務。對於不同的排名結果可以用逆序來評價它們之間的差異。考慮1...