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

来源:互联网 发布:c语言可以做什么软件 编辑:程序博客网 时间:2024/05/20 04:12

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

#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);}