| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
int64In Reply To:郁闷,总是WA!! Posted by:liuyuyangfoam at 2005-12-20 14:27:52 > //计算逆序数
> private static int solve(int[] array,int n) {
> int[] temp = new int[n];
> return mergeSort(array,temp,0,n);
> }
> // 包括low,不包括high.
> private static int mergeSort(int[] src, int[] dest, int low, int high) {
> int length = high - low;
> if (length==1) return 0;
> int mid = (low + high) >> 1;
> int c1 = mergeSort(src, dest, low, mid);
> int c2 = mergeSort(src, dest, mid, high);
> if (src[mid-1]<=src[mid]) {
> return c1+c2;
> }
> int c3 = 0;
> int i=low, p = low, q = mid;
> while(p<mid&&q<high) {
> if (src[p]<=src[q]) {
> dest[i++] = src[p++];
> c3 += (q-mid);
> }
> else {
> dest[i++] = src[q++];
> //c3 += (mid-p);
> }
> }
> while(p<mid) {
> dest[i++] = src[p++];
> c3 += (q-mid);
> }
> while(q<high) {
> dest[i++] = src[q++];
> }
> System.arraycopy(dest, low, src, low, length);
>
> return c1+c2+c3;
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator