关于小鱼比可爱
  • 板块学术版
  • 楼主PrefixAMS
  • 当前回复4
  • 已保存回复4
  • 发布时间2020/12/9 11:11
  • 上次更新2023/11/5 06:22:10
查看原帖
关于小鱼比可爱
122757
PrefixAMS楼主2020/12/9 11:11

树状数组求逆序对

int n;
void add(int i)
{
	while(i<=n)
	{
		c[i]++;
		i+=i&(-i);	
	}
}
long long sum(int i)
{
	long long res=0;
	while(i>0)
	{
		res+=c[i];
		i-=i&(-i);
	}
	return res;
}
 
int main()
{
	cin>>n;
	int a;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a);
		node[i].index=i;
		node[i].v=a;
	}
	sort(node+1,node+1+n);
	long long ans=0;
	for(int i=1;i<=n;i++)
	{
		add(node[i].index);
		ans+=i-sum(node[i].index); 
	}
	cout<<ans;
	return 0;
}

看的blog是这么写的用了离散化

但是这个add 和sum 函数我就迷了,求助大佬

2020/12/9 11:11
加载中...