#include <string>#include<vector>#include<fstream>using namespaceStd;std::vector<int>v;intbigarr[100000];inthelparr[100000];_int64 Mergeandcount (int* Arr,intLeftintMidintRight ) { if(Left >=Right ) { return 0; } for(inti = left; I <= right; i++) {Helparr[i]=Arr[i]; } intHead1 =Left ; intHead2 = mid +1; intnum = Right-left +1; intK =Left ; _int64 Rnum=0; for(inti =0; i < num; i++, k++ ) { if(Head1 >mid) {Arr[k]= helparr[head2++]; } Else if(Head2 >Right ) {Arr[k]= helparr[head1++]; } Else if(Helparr[head1] >Helparr[head2]) {Rnum+ = (Mid-head1 +1 ); ARR[K]= helparr[head2++]; } Else{Arr[k]= helparr[head1++]; } } returnRnum;} _int64 Getr (int* Arr,intLeftintRight ) { if((Right-left) <=0 ) { return 0; } intMid = (left + right)/2; _int64 Leftnum=Getr (arr, left, mid); _int64 Rightnum= Getr (arr, mid+1, right); _int64 Extranum=Mergeandcount (arr, left, Mid, right); returnLeftnum + Rightnum +Extranum;}voidMain () {FStream infile ("IntegerArray.txt" ); stringtmp; while(Getline (infile, tmp)) {intnum =atoi (Tmp.c_str ()); V.push_back (num); } for(inti =0; I <100000; i++) {Bigarr[i]=v.at (i); } _int64 rnum= Getr (Bigarr,0,100000-1 );}
Algorithms:design and analysis, Part 1 "Program 1/reverse number"