Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

郁闷,总是WA!!

Posted by liuyuyangfoam at 2005-12-20 14:27:52 on Problem 2299
	//计算逆序数
	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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator