#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
const int Kmax=500000+10;//数组开小了,尴尬
int num[Kmax];
int temp[Kmax];
int sum[Kmax];
int n;
map<int,int> mp;
inline int lowbit(int x){
return x&-x;
}
int getsum(int x)
{
int res=0;
for(;x;x-=lowbit(x)){
res+=sum[x];
}
return res;
}
void insert(int x)
{
for(;x<=n;x+=lowbit(x)){
sum[x]++;
}
}
int main(){
long long ans=0;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&num[i]);
}
copy(num,num+n,temp);
sort(temp,temp+n);
int m=unique(temp,temp+n)-temp;//去重
for(int i=0;i<m;i++)//数据离散化
{
mp[temp[i]]=i+1;
}
insert(mp[num[n-1]]);//从后往前插入数据
for(int i=n-2;i>=0;i--)
{
ans+=getsum(mp[num[i]]);//统计当前数比后面几个数大
insert(mp[num[i]]);
}
printf("%lld\n",ans);//爆int
return 0;
}
数据的离散化(排序)
最新推荐文章于 2023-07-30 21:30:47 发布