求排列的逆序数之树状数组
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的区间和)
以上是关于求排列的逆序数之树状数组的主要内容,如果未能解决你的问题,请参考以下文章