表不喜歡離散化,因爲 美麗 醜陋,人人都會的東西,爲什麼要考呢QAQ
就是BIT
正一次反一次,相乘
#include<map>
map<int,int>ap;
#define N 30010
int bit[N<<2],a[N],b[N];
int n,f[N],g[N];
long long ans;
void add(int x)
{
while(x<=n)
{
bit[x]++;
x+=x&(-x);
}
}
void clear()
{
fr(i,1,n)
bit[i]=0;
}
int query(int x)
{
int r=0;
while(x)
{
r+=bit[x];
x-=x&(-x);
}
return r;
}
void getans(int *o)
{
fr(i,1,n)
{
o[i]=query(a[i]);
add(a[i]+1);
}
}
int main()
{
n=read();
fr(i,1,n)
b[i]=a[i]=read();
sort(b+1,b+n+1);
fr(i,1,n)
ap[b[i]]=i;
fr(i,1,n)
a[i]=ap[a[i]];//就是噁心的離散化
getans(f);//正求
fr(i,1,n)
b[i]=a[i];
fr(i,1,n)
a[i]=n-b[n-i+1]+1;//反轉
clear();
getans(g);//反求
fr(i,1,n)
ans+=f[i]*g[n+1-i];
printf("%lld\n",ans);
return 0;
}