Simple question. Simulate a bit.
#include <cstdio>#include<cstring>#include<cmath>#include<vector>#include<map>#include<queue>#include<stack>#include<algorithm>using namespacestd;Const intmaxn= $;intA[maxn],b[maxn],n;intMain () {scanf ("%d",&N); for(intI=1; i<=n; i++) scanf ("%d",&A[i]); for(intI=1; i<=n; i++) scanf ("%d",&B[i]); intflag=1; intp=n+1; for(intI=2; i<=n;i++) if(b[i]<b[i-1]) {p=i; Break;} for(inti=p;i<=n;i++) { if(A[i]==b[i])Continue; Elseflag=0; } if(flag==1) {printf ("insertion sort\n"); if(p==n+1) p=N; Sort (a+1, a+p+1); for(intI=1; i<=p; i++) {printf ("%d", A[i]); if(i<n) printf (" "); Elseprintf"\ n"); } for(inti=p+1; i<=n; i++) {printf ("%d", A[i]); if(i<n) printf (" "); Elseprintf"\ n"); } } Else{printf ("Merge sort\n"); intlen=1; while(1) { intpp=1; while(1) { if(pp+len-1>N) {sort (a+pp,a+n+1); Break; } Else{sort (a+pp,a+pp+Len); PP=pp+Len; } } intFail=0; for(intI=1; i<=n; i++)if(A[i]!=b[i]) fail=1; if(fail==0) {len=len*2; intppp=1; while(1) { if(ppp+len-1>N) {sort (a+ppp,a+n+1); Break; } Else{sort (a+ppp,a+ppp+Len); PPP=ppp+Len; } } for(intI=1; i<=n;i++) {printf ("%d", A[i]); if(i<n) printf (" "); Elseprintf"\ n"); } Break; } Len=len*2; } } return 0;}
PAT (Advanced level) 1089. Insert or Merge (25)