通过根据伪代码编写程序,实现的功能是合并排序,输出RES。 (RES可能是用来记录要素被交换了多少次,但本人不太清楚。 当然,这不影响这个问题的制作。 )
输入样例:
10
8 2 5 4 10 2 9 4 3 10 输出样例:
41
1、数组b使用静态数组。 # includeiostreamusingnamespacestd; longlongf(longlonga[],int l,int mid,int r ) {long long i=l,j=mid,k=0,res=0; int b[r]; while(imidjr ) if ) a[I]a[j] ) b[k ]=a[i ]; else {b[k ]=a[j ]; res =mid - i; }while(imid ) {b[k ]=a[i ]; (while ) Jr ) b(k )=a ) j; }for(intI=0; I=中小学; I ) a(LI )=b (I ); }返回RES; ) longlongh(longlonga[ ),int l,int r ) ) {long long res=1; if(L1==r )返回RES; if(LR ) {intmid=) LR )/2; RES=h(a,l,mid ); RES=h(a,mid,r ); RES=f(a,l,mid,r ); }返回RES; (}int main ) ) {int n; scanf('%d ',n ); 龙龙a [ n ]; for(intI=0; in; I ) Scanf('%lld ',a[i]; }printf('%lld(n ),h ) a,0,n ); 返回0; (/*1082541029310 )/2,数组b的动态数组,但# include iostream # includevectorusingnamespacestd; 泰普德夫龙龙LL; llf(inta[],int l,int mid,int r ) ) intI=l,j=mid; ll res=0; vectorll b; while(imidjr ) if ) a[I]a[j] ) b.push_back ) a[I]; ELSE{b.push_back(a[j] ); res =mid - i; }while(imid ) b.push_back ) a[I]; }while(Jr ) b.push_back ) a[j]; }for(intI=0; i=b.size ()-1; I ) a(LI )=b (I ); }返回RES; (llh ) inta[(],int l,int r ) {ll res=1; if(L1==r )返回RES; if(LR ) {intmid=) LR )/2; RES=h(a,l,mid ); RES=h(a,mid,r ); RES=f(a,l,mid,r ); }返回RES; (}int main ) ) {int n; scanf('%d ',n ); int a[n]; for(intI=0; in; I ) Scanf('%d ',a[i]; }printf('%lld(n ),h ) a,0,n ); 返回0; }