➤ Problem Link : INVCNT
👉 Hint : Think of some tree based data structure like segment tree or ordered_set in C++ STL
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
ll arr[200008];
ll st[40000001];
void build(ll v, ll l, ll r)
{
if(l==r)
{
st[v]=0;
return;
}
ll mid=(l+r)/2;
build(2*v,l,mid);
build(2*v+1,mid+1,r);
st[v]=st[2*v]+st[2*v+1];
}
void update(ll v, ll l, ll r, ll ind)
{
if(l==r)
{
st[v]=1;
return;
}
ll mid=(l+r)/2;
if(ind>=l && ind<=mid)
update(2*v,l,mid,ind);
else
update(2*v+1,mid+1,r,ind);
st[v]=st[2*v]+st[2*v+1];
}
ll query(ll v, ll s ,ll e, ll l , ll r)
{
if(s>r || e<l)
return 0;
if(s>=l && e<=r)
return st[v];
ll mid=(s+e)/2;
return query(2*v,s,mid,l,r)+query(2*v+1,mid+1,e,l,r);
}
int main()
{
int t;
ll n;
cin>>t;
while(t--)
{
scanf("\n");
cin>>n;
ll mx=-1;
for(ll i=0;i<n;i++)
{
cin>>arr[i];
mx=max(mx,arr[i]);
}
mx=pow(10,7)+1;
build(1,1,mx);
update(1,1,mx,arr[0]);
ll ans=0;
for(ll i=1;i<n;i++)
{
ans+=query(1,1,mx,arr[i]+1,mx);
update(1,1,mx,arr[i]);
}
cout<<ans<<"\n";
}
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
