Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <bits/stdc++.h>using namespace std;long long ans=0;//lpos start of lefe half, rpos start of right halfvoid Merge(long long a[], long long tmp[], int lpos, int rpos, int rtend){int lftend, num_elements, tmp_pos;lftend=rpos-1;tmp_pos=lpos;num_elements=rtend-lpos+1;while(lpos<=lftend && rpos<=rtend){if( a[lpos]<= a[rpos]){tmp[tmp_pos++]=a[lpos++];}else{tmp[tmp_pos++]=a[rpos++];ans+=lftend-lpos+1;//get the answer}}while( lpos<= lftend )tmp[tmp_pos++]=a[lpos++];while( rpos<=rtend )tmp[tmp_pos++]=a[rpos++];for(int i=0; i<num_elements; i++, rtend--){a[rtend]=tmp[rtend];}}