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

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


相关文章:

  • 2021-12-29
  • 2022-12-23
  • 2022-12-23
  • 2022-01-23
  • 2021-07-09
  • 2021-07-15
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-10-01
  • 2021-08-18
  • 2021-12-16
  • 2021-07-15
  • 2021-10-27
相关资源
相似解决方案