分治法,1AC,2WA,7RE
#include<bits/stdc++.h>
using namespace std;
struct pp{
int num;
int a;
};
pp c[100000010],a[100000010];
long long n;
void print(__int128 num){
if(num > 9){
print(num / 10);
}
putchar(num%10+'0');
}
__int128 sum=0;
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<=a[l2+j].a){
c[sum++].a=a[l1+i++].a;
c[sum].num=a[l1+i].num;
}
else{
c[sum++].a=a[l2+j++].a;
c[sum].num=a[l2+j].num;
for(int aaa=i;aaa<a_size;aaa++){
sum=sum+(a[l1+aaa].num+1)*(n-a[l1+aaa].num);
}
}
}
if(i<a_size){
for(;i<a_size;){
c[sum++].a=a[l1+i++].a;
c[sum].num=a[l1+i].num;
}
}
else{
for(;j<b_size;){
c[sum++].a=a[l2+j++].a;
c[sum].num=a[l1+i].num;
}
}
return a_size+b_size;
}
void gb(long long l,long long r){
if(r-l==1){
gb_b(l,l,r,r);
for(long long i=0;i<2;i++){
a[l+i].a=c[i].a;
}
return;
}
if(l==r){
return;
}
long long mid=(l+r)/2;
gb(l,mid);
gb(mid+1,r);
long long len=gb_b(l,mid,mid+1,r);
for(long long i=0;i<len;i++){
a[l+i].a=c[i].a;
}
}
int main(){
cin>>n;
for(long long i=0;i<n;i++){
cin>>a[i].a;
a[i].num=i;
}
gb(0,n-1);
print(sum);
}