树状数组求逆序数
Posted mch5201314
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树状数组求逆序数相关的知识,希望对你有一定的参考价值。
代码
#include<bits/stdc++.h>
using namespace std;
#define MAX_N 100
int bit[MAX_N + 1], n;
long long f;
int a[MAX_N];
int sum(int i){
int s = 0;
while(i > 0){
s += bit[i];
i -= i & -i;
}
return s;
}
void add(int i, int x){
while(i <= n){
bit[i] += x;
i += i & -i;
}
}
void solve()
{
long long ans = 0;
for(int j = 0; j < n; ++j){
ans += j - sum(a[j]);
add(a[j], 1);
}
f=f+ans;
}
int main()
{
while(~scanf("%d", &n))
{
f=0;
for(int i = 0; i < n; ++i){
scanf("%d", &a[i]);
}
//solve();
sort(a,a+n);
do{
memset(bit,0,sizeof(bit));
solve();
}while(next_permutation(a,a+n));
cout<<f<<endl;
}
return 0;
}
以上是关于树状数组求逆序数的主要内容,如果未能解决你的问题,请参考以下文章