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 |
求大侠指点,,修改算导上的归并排序,,有BUG...#include<iostream> #include <stdlib.h> #include<cstdio> using namespace std; #define mmax 500001 int a[mmax]; int t[mmax]; int r[mmax /2 + 1], l[mmax /2 + 1]; __int64 sum ; void merge(int s,int mid ,int e) { int i, j; int n1 = mid - s + 1; int n2 = e - mid; for(i = 0; i < n1; i++) l[i] = a[s + i]; for(j = 0; j < n2; j++) r[j] = a[mid + j + 1]; l[n1] = 0xffffff; r[n2] = 0xffffff; i = 0; j = 0; for(int k = s; k <= e; k++) { if(l[i] <= r[j]) { a[k] = l[i]; i++; } else { if(l[i] != 0xffffff) sum += mid - s + 1; a[k] = r[j]; j++; } } } void mergeSort(int s,int e) { if(s < e){ int mid = (s+e)/2; mergeSort(s,mid); mergeSort(mid+1,e); merge(s,mid,e); } } int main() { //freopen("2299.txt","r",stdin); int i; int num; while(cin>>num && num) { sum = 0; for(i = 0;i < num;i++) cin>>a[i]; mergeSort(0,num-1); //for(int i = 0; i < num; i++) // cout<<a[i]<<" "; //cout<<endl; cout<<sum<<endl; } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator