树状数组应用-冒泡排序的交换次数,模板应用。
#include <iostream>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int n,a[maxn];
int sum(int i)
{
int s=0;
while(i>0)
{
s+=a[i];
i-=i&-i;
}
return s;
}
void add(int i,int x)
{
while(i<=n)
{
a[i]+=x;
i+=i&-i;
}
}
void solve()
{
ll ans=0;
for(int j=0;j<n;j++)
{
ans+=j-sum(a[j]);//把j-(BIT查询得到的前a(j)项的和)加到答案中
add(a[j],1);//把BIT中a(j)位置上的值加1
}
printf("%lld
",ans);
}