#include <bits/stdc++.h>
using namespace std;
typedef __int128 ll;
const int N=1e6+6;
ll n,a[N],b[N];
ll c1[N],c2[N],sum;
ll ans;
map<ll,ll> id;
struct Node{
ll sum,cnt;
};
ll lowbit(ll x){
return x&(-x);
}
void Add(ll x,ll y){
if(x>sum)
return;
c1[x]+=y,c2[x]++;
Add(x+lowbit(x),y);
}
Node Sum(ll x){
if(x==0)
return {0,0};
return {c1[x]+Sum(x-lowbit(x)).sum,c2[x]+Sum(x-lowbit(x)).cnt};
}
void write(ll x){
if(x>9)
write(x/10);
putchar(x%10+'0');
}
ll read()
{
ll x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
return x*f;
}
int main(){
n=read();
for(int i=1;i<=n;i++)
a[i]=b[i]=read();
sort(b+1,b+n+1);
for(int i=1;i<=n;i++)
if(i==1 || b[i]!=b[i-1])
id[b[i]]=++sum;
for(int i=n;i;i--){
a[i]=id[a[i]];
Add(a[i],i);
Node t=Sum(a[i]-1);
ans+=(ll)t.cnt*i*(n+1)-(ll)i*t.sum;
}
write(ans);
return 0;
}
最后三个点T