大意:
给你N个数,求逆序对个数(树状数组)
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define LL long long
using namespace std;
LL n,x,tree[100010];
void add(LL k,LL num)
{
while(k<=100000){
tree[k]+=num;
k+=k&(-k);
}
}
LL query(LL k)
{
LL Sum=0;
while(k){
Sum+=tree[k];
k-=k&-k;
}
return Sum;
}
int main()
{
LL i,j;
cin>>n;
memset(tree,0,sizeof(tree));
long long sum=0;
for(i=1;i<=n;i++)
{
cin>>x;
add(x,1);
sum+=(i-query(x));
}
cout<<sum;
return 0;
}
本文介绍了一种使用树状数组(Binary Indexed Tree)高效计算逆序对数量的方法。通过树状数组进行前缀和查询与更新,实现对逆序对的快速统计。文章提供了完整的C++代码实现,展示了如何在给定数组中计算逆序对的数量。
411

被折叠的 条评论
为什么被折叠?



