- 【例2.5】求逆序对
为什么错了,大佬帮帮
- 2024-1-21 11:02:39 @
#include<bits/stdc++.h>
using namespace std;
const long long sz=114514;
long long n;
long long a[sz],r[sz];
long long ans=0;
void in(long long n,long long a[]){
for(int i=0;i<n;i++) cin>>a[i];
}
void msort(int s,int t){
if(s==t) return;
int mid=(s+t)/2;
msort(s,mid);
msort(mid+1,t);
int i=s,j=mid+1,k=s;
while(i<=mid&&j<=t){
if(a[i]<=a[j]){
r[k]=a[i];
k++;
j++;
}else{
r[k]=a[j];
k++;
j++;
ans+=mid-i+1;
}
}
while(i<=mid){
r[k]=a[i];
k++;
i++;
}
while(j<=t){
r[k]=a[j];
k++;
j++;
}
for(int i=s;i<=t;i++) a[i]=r[i];
}
int main(){
system("color F1");
cin>>n;
in(n,a);
msort(0,n-1);
cout<<ans<<endl;
return 0;
}
0 comments
No comments so far...
Information
- ID
- 796
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- # Submissions
- 197
- Accepted
- 35
- Uploaded By