求排列的逆序数之树状数组

Posted 紫幽耀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求排列的逆序数之树状数组相关的知识,希望对你有一定的参考价值。

代码实现

#include<iostream>

#include<cstdio>

#include<cstdlib>

using namespace std;

int num[100001];

int n,a[100001];

long long count=0; 

void add(int x){

for(int i=x;i<=n;i+=(i&-i))num[i]++;

}

void query(int p){

for(int i=p; i; i -= (i & -i))count+=num[i];

}

int main(){

cin>>n;

for(int i=1;i<=n;i++)

cin>>a[i];

for(int i=n;i>=1;i--){

query(a[i]);

add(a[i]);

}

cout<<count;

}

反着做,也可正着做(求此数到n的区间和

以上是关于求排列的逆序数之树状数组的主要内容,如果未能解决你的问题,请参考以下文章

树状数组求逆序数

[树状数组]求排列的逆序数

HDU 2838 (树状数组求逆序数)

树状数组求逆序对

CF749E Inversions After Shuffle 解题报告 (期望 树状数组)

树状数组求逆序对