1 solutions
-
0
C :
#include<stdio.h> long long a[100010]; long long b[100010]; long long count; void mergesort(long long *A,int x,int y,long long *T){ if(y-x>1){ int m=x+(y-x)/2; int p=x,q=m,i=x; mergesort(A,x,m,T); mergesort(A,m,y,T); while(p<m||q<y){ if(q>=y||p<m&&A[p]<=A[q]) T[i++]=A[p++]; else {T[i++]=A[q++];count+=m-p;}} for(i=x;i<y;i++) A[i]=T[i];}} int main(){ int N; while(scanf("%d",&N)!=EOF){ int i; for(i=0;i<N;i++) scanf("%lld",&a[i]); count=0; mergesort(a,0,N,b); printf("%lld\n",count); } return 0;}
C++ :
#include<iostream> #include<cstdio> using namespace std; const int maxn=100000+10; int a[maxn],t[maxn]; long long ans; void Sort(int l,int r) { if(l==r) return; int mid=(l+r)/2; Sort(l,mid); Sort(mid+1,r); int i=l,j=mid+1,now=0; while(i<=mid&&j<=r) { if(a[i]>a[j]) { ans+=mid-i+1; t[++now]=a[j++]; } else t[++now]=a[i++]; } while(i<=mid) t[++now]=a[i++]; while(j<=r) t[++now]=a[j++]; now=0; for(int k=l;k<=r;k++) a[k]=t[++now]; } int main() { int n; int i; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d",&a[i]); ans=0; Sort(1,n); cout<<ans<<endl; return 0; }
- 1
Information
- ID
- 622
- Time
- 1000ms
- Memory
- 64MiB
- Difficulty
- (None)
- Tags
- (None)
- # Submissions
- 0
- Accepted
- 0
- Uploaded By