归并排序改的,交上去10分,剩下的点TLE
#include<bits/stdc++.h>
using namespace std;
void print(__int128 num) {
if (num > 9) {
print(num / 10);
}
putchar(num%10+'0');
}
__int128 sum=0;
long long a[1000000],n,ans;
long long gb_b(long long l1,long long r1,long long l2,long long r2){
long long i=0;
long long j=0;
long long sum=0;
long long a_size=r1-l1+1;
long long b_size=r2-l2+1;
while(i<a_size&&j<b_size){
if(a[l1+i]<=a[l2+j]){
}
else{
sum=sum+(a_size-i)*(l1+i-1);
}
}
return a_size+b_size;
}
void gb(long long l,long long r){
if(r-l==1){
gb_b(l,l,r,r);
return;
}
if(l==r){
return;
}
long long mid=(l+r)/2;
sort(a+l,a+mid);
gb(l,mid);
sort(a+mid+1,a+r);
gb(mid+1,r);
gb_b(l,mid,mid+1,r);
}
int main(){
cin>>n;
for(long long i=0;i<n;i++){
cin>>a[i];
}
gb(0,n-1);
print(sum);
}