czy032321054 @ 2024-07-31 17:43:09
降序代码,样例都过不了:
#include<bits/stdc++.h>
using namespace std;
int a[500005],n;
long long ans;
bool cmp(int x,int y){
return x>y;
}
void mt(int l,int r){
if(l>=r)return;
int mid=(l+r)>>1;
mt(l,mid);
mt(mid+1,r);
sort(a+l,a+mid+1,cmp);
sort(a+mid+1,a+r+1,cmp);
int i=l,j=mid+1;
while(i<=mid&&j<=r)
if(a[i]>a[j])
i++;
else
j++,ans+=i-l;//统计答案
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
mt(0,n-1);
cout<<ans;
}
升序代码 已A:
#include<bits/stdc++.h>
using namespace std;
int a[500005],n;
long long ans;
void mt(int l,int r){
if(l>=r)return;
int mid=(l+r)>>1;
mt(l,mid);
mt(mid+1,r);
sort(a+l,a+mid+1,);
sort(a+mid+1,a+r+1);
int i=l,j=mid+1;
while(i<=mid&&j<=r)
if(a[i]<=a[j])
i++;
else
j++,ans+=mid-i+1;//统计答案
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
mt(0,n-1);
cout<<ans;
}