Below is the link to the problem and my code. I could only pass case 1 with my code. And other cases are showing wrong answers. It would be of great help if anyone could identify the errors in my code.
#include<bits/stdc++.h>
using namespace std;
vector<long long int>freq(1000000,0);
void merge(vector<long long int>&v,long long int low,long long int mid,long long int high)
{
long long int count=0;
long long int i = low,j = mid+1,k=0;
vector<long long int>temp(high-low+1);
for(long long int p=low;p<=high;p++)
{
if(i>mid)
{
temp[k++] = v[j++];
}
else if(j>high)
{
temp[k++] = v[i];
freq[v[i]]+=count;
i++;
}
else if(v[i]<=v[j])
{
temp[k++] = v[i];
freq[v[i]]+=count;
i++;
}
else
{
temp[k++] = v[j++];
count++;
}
}
for(long long int p = 0;p<k;p++)
{
v[low+p] = temp[p];
}
}
void merge_sort(vector<long long int>&v,long long int low,long long int high)
{
if(low>=high)
{
return;
}
long long int mid = (low+high)/2;
merge_sort(v,low,mid);
merge_sort(v,mid+1,high);
merge(v,low,mid,high);
}
int main()
{
long long int t;
cin>>t;
while(t--)
{
long long int n,x;
cin>>n;
vector<long long int> v;
for(long long int i=0;i<n;i++)
{
cin>>x;
v.push_back(x);
}
vector<long long int>w = v;
merge_sort(v,0,n-1);
for(long long int i=0;i<n;i++)
{
cout<<freq[w[i]]<<" ";
}
cout<<endl;
}
}