树状数组40pts求助
  • 板块P1908 逆序对
  • 楼主list_123
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/3/13 18:12
  • 上次更新2024/3/13 18:22:04
查看原帖
树状数组40pts求助
1077533
list_123楼主2024/3/13 18:12
#include<bits/stdc++.h>
using namespace std;
const long long N=1e7+5,M=1e8-3;
long long n,b[N],c[N];
long long a[N];
struct pl{long long f;long long s;
}l1[N],l2[N];
bool cmp1(pl a,pl b)
{
    return a.f<b.f;
}
long long lowbit(long long x)
{
	return x&(-x);
}
long long answer(long long x)
{
	long long s=0;
	while(x)
	{
		s+=a[x];
		x-=lowbit(x);
	}
	return s;
}
void add(long long x,long long da)
{
	
	while(x<=n)
	{
		a[x]+=da;
		x+=lowbit(x);
	}
}
int main()
{
	cin>>n;
	 for(long long i=1;i<=n;i++)
        scanf("%lld",&l1[i].f),l1[i].s=i;
    sort(l1+1,l1+n+1,cmp1);
    for(long long i=1;i<=n;i++)
	b[l1[i].s]=i;
	long long ans=0;
	for(long long i=1;i<=n;i++)
	{
		add(b[i],1);
		ans+=answer(n)-answer(b[i]);
	}
	cout<<ans;
}
2024/3/13 18:12
加载中...