#include <bits/stdc++.h>
using namespace std;
using ll = long long ;
int f[30010][4],a[30010],b[30010];
int t[60010];
int n,m;
void add(int x,int y){
while(x<=m){
t[x]+=y;
x+=x&-x;
}
}
int ask(int x){
int ans=0;
while(x){
ans+=t[x];
x-=x&-x;
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
f[i][1]=1;
}
memcpy(b,a,sizeof a);
sort(b+1,b+1+n);
m=unique(b+1,b+1+n)-b-1;
for(int i=1;i<=n;i++) a[i]=lower_bound(b+1,b+1+m,a[i])-b;
for(int i=2;i<=3;i++){
memset(t,0,sizeof t);
for(int j=1;j<=n;j++){
f[j][i]=ask(a[j]-1);
add(a[j],f[j][i-1]);
}
}
ll ans=0;
for(int i=1;i<=n;i++)ans+=f[i][3];
cout<<ans;
}
n元上升子序列的个数
最新推荐文章于 2024-07-08 22:12:26 发布