Counting number of inversions using fenwick tree.

Revision en1, by kunalkumar050894, 2018-05-31 00:05:30

Following is the code for counting number of inversions in a permutation(1...n) using fenwick tree. I can't get "inv += query(n) — query(a[i]); update(a[i], 1);" these two steps. Can anyone help?

include <bits/stdc++.h>

using namespace std; long long bit[1000005],a[1000005],n;

void update(int x,int del) { for(;x<=n;x+=x&-x) { bit[x]+=del; } } int query(int x) { int sum=0; for(;x>0;x-=x&-x) { sum+=bit[x]; } return sum; } int main() { cin>>n;

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

    cin>>a[i];

}

long long inv = 0; for (int i=1; i<=n; i++) { inv += query(n) — query(a[i]); update(a[i], 1); } cout<<inv<<endl; return 0; }

Tags bit/fenwick tree, inversions

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en1 English kunalkumar050894 2018-05-31 00:05:30 818 Initial revision (published)