树状数组应用-冒泡排序的交换次数

树状数组应用-冒泡排序的交换次数,模板应用。

#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\n",ans);
}


posted @ 2017-08-26 09:46  Bryce1010  阅读(81)  评论(0编辑  收藏  举报