Sort it
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3498 Accepted Submission(s): 2536
Problem Description
You want to processe a sequence of n distinct integers by swapping two adjacent sequence elements until the sequence is sorted in ascending order. Then how many times it need.
For example, 1 2 3 5 4, we only need one operation : swap 5 and 4.
For example, 1 2 3 5 4, we only need one operation : swap 5 and 4.
Input
The input consists of a number of test cases. Each case consists of two lines: the first line contains a positive integer n (n <= 1000); the next line contains a permutation of the n integers from 1 to n.
Output
For each case, output the minimum times need to sort it in ascending order on a single line.
Sample Input
3 1 2 3 4 4 3 2 1
Sample Output
0 6#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[1010]; int b[1010]; int n,cnt; void merge(int a[],int s,int m,int e) { int i=s,j=m+1,k=s; while(i<=m&&j<=e) { if(a[i]<=a[j]) b[k++]=a[i++]; else { cnt+=j-k; b[k++]=a[j++]; } } while(i<=m) b[k++]=a[i++]; while(j<=e) b[k++]=a[j++]; for(i=s;i<=e;i++) a[i]=b[i]; } void mergesort(int a[],int s,int e) { if(s<e) { int m=(s+e)/2; mergesort(a,s,m); mergesort(a,m+1,e); merge(a,s,m,e); } } int main() { int i,j,mm; while(scanf("%d",&n)!=EOF) { for(i=1;i<=n;i++) scanf("%d",&a[i]); cnt=0; mergesort(a,1,n); printf("%d\n",cnt); } return 0; }