#include<iostream>
using namespace std;
typedef long long int lli;
lli temp[10000000];
lli arr[1000000+10];
#include<bits/stdc++.h>
lli ic=0;
lli merge (lli arr[],lli start,lli mid,lli end)
{
lli i=start, j=mid+1;
lli p=start;
lli lc=0;
while(i<=mid && j<=end)
{
if(arr[i]>arr[j])
{
lc+=mid-i+1;
temp[p++]=arr[j];
j++;
}
else
{
temp[p++]=arr[i++];
}
}
while(i<=mid) temp[p++]=arr[i++];
while(j<=end) temp[p++]=arr[j++];
for(int i=start;i<p;i++) arr[i]=temp[i];
return lc;
}
void divide(lli arr[],lli start,lli end)
{
if(start<end)
{
lli mid=(start+end)/2;
divide(arr,start,mid);
divide(arr,mid+1,end);
ic+=merge(arr,start,mid,end);
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
ic=0;
lli n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
divide(arr,0,n-1);
cout<<ic<<endl;
}
return 0;
}
using namespace std;
typedef long long int lli;
lli temp[10000000];
lli arr[1000000+10];
#include<bits/stdc++.h>
lli ic=0;
lli merge (lli arr[],lli start,lli mid,lli end)
{
lli i=start, j=mid+1;
lli p=start;
lli lc=0;
while(i<=mid && j<=end)
{
if(arr[i]>arr[j])
{
lc+=mid-i+1;
temp[p++]=arr[j];
j++;
}
else
{
temp[p++]=arr[i++];
}
}
while(i<=mid) temp[p++]=arr[i++];
while(j<=end) temp[p++]=arr[j++];
for(int i=start;i<p;i++) arr[i]=temp[i];
return lc;
}
void divide(lli arr[],lli start,lli end)
{
if(start<end)
{
lli mid=(start+end)/2;
divide(arr,start,mid);
divide(arr,mid+1,end);
ic+=merge(arr,start,mid,end);
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
ic=0;
lli n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
divide(arr,0,n-1);
cout<<ic<<endl;
}
return 0;
}
No comments:
Post a Comment