蜜汁RE
查看原帖
蜜汁RE
437885
xps0606楼主2021/4/22 19:46
#include<bits/stdc++.h> 
#define ll long long
using namespace std;  
int n,m,c[1000010],t[1000010];
ll ans=0;
struct node{
	int s,z;
}a[1000010];
int lowbit(int ad){return ad&(-ad);};
bool cmp(const node &x,const node &y)
{
	if(x.z==y.z) return x.s<y.s;
	else return x.z<y.z;
}
int update(int x,int y)
{
	for(;x<=n;x+=lowbit(x)) t[x]+=y;
}
int sum(int x)
{
	int as=0;
	while(x>0)
	{
		as+=t[x];
		x-=lowbit(x);
	}
	return as;
}
int main()  
{  
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i].z);
		a[i].s=i;
	} 
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++)
    {
    	c[a[i].s]=i;
    }
    for(int i=1;i<=n;i++)
    {
    	update(c[i],1);
    	ans+=i-sum(c[i]);
    }
    printf("%lld\n",ans);
	return 0;
}
2021/4/22 19:46
加载中...