wrong ans in LEBOBBLE

#include<stdio.h>

long double merge(long long [],long double [],long long,long long,long long);
long double part(long long [],long double [],long long,long long);
int main()
{
long long i,t,size;
long long d;
long double q;
long double ans;
scanf("%lld",&t);
while(t–)

{
scanf("%lld%lld",&size,&d);
long long arr[2size];
long double p[2
size];
for(i=0; i<2size; i=i+2)
{
scanf("%lld",&arr[i]);
arr[i+1]=arr[i]+d;
}
for(i=0;i<2
size;i=i+2)
{ scanf("lf",&q); p[i]=1.00-(0.01*q); p[i+1]=0.01*q; } ans=part(arr,p,0,((2*size)-1)); printf(".4Lf\n",ans);

}
// getch();
return 0;
}

long double part(long long arr[],long double p[],long long min,long long max)
{ long double ans=0.00;
long long mid;
if(min<max)
{
mid=(min+max)/2;
ans+=part(arr,p,min,mid);
ans+=part(arr,p,mid+1,max);
ans+=merge(arr,p,min,mid,max);

}
return ans;
}

long double merge(long long arr[],long double p[],long long min,long long mid,long long max)
{ long double ans=0.00,rms=0.00;
long long tmp[max-(min+1)];
long double tp[max-(min+1)];
long long i,j,k,m;
j=min;
m=mid+1;
for(i=min;i<=mid;i++)
rms=rms+p[i];
for(i=0; j<=mid && m<=max ; i++)
{
if(arr[j]<=arr[m])
{
tmp[i]=arr[j];
tp[i]=p[j];
rms=rms-p[j];
j++;
}
else
{
tmp[i]=arr[m];
tp[i]=p[m];
ans=ans+(rms*p[m]);
m++;
}
}
if(j>mid)
{
for(k=m; k<=max; k++)
{
tmp[i]=arr[k];
tp[i]=p[k];
i++;
}
}
else
{
for(k=j; k<=mid; k++)
{
tmp[i]=arr[k];
tp[i]=p[k];
i++;
}
} i=0;
for(k=min; k<=max; k++)
{
arr[k]=tmp[i];
p[k]=tp[i];
i++;
}
return ans;
}