this is what i tried
I was getting wa though three cases did pass later i got a tle . please help. also someone please upvote this because i am unable to ask questions because of just 1 karma i have.
#include<stdio.h>
#include<stdlib.h>
long long int x[100004],y[100004],z[100004],sumx[100004],sumy[100004],pro[100004];
long int binarysearch(long long int arr[],long int n,long int high,long int low)
{
//ignore the pro array it is insignificant
long int mid,i;
while(low<=high)
{
mid=(high+low)/2;
if(arr[mid]==n)
return mid;
else if(arr[mid]>n)
{
high=mid-1;
}
else
low=mid+1;
if(low==high)
return low;
}
}
//void merge(long int arr[],long int left[],long int right[],long int nleft,long int nright)
/*{long int i=0,j=0,k=0;
while(i!=nleft&&j!=nright)
{if(left[i]<right[j])
{arr[k]=left[i];
k++;
i++;
}
else
{arr[k]=right[j];
k++;
j++;
}
}
while(i!=nleft)
{arr[k]=left[i];
k++;
i++;
}
while(j!=nright)
{arr[k]=right[j];
k++;
j++;
}
}
void mergesort(long int arr[],long int n)
{long int i,nleft,nright,left[50002],right[50002];
if(n<2)
return;
else
{
nleft=(n+1)/2;
nright=n-nleft;
for(i=0;i<nleft;i++)
left[i]=arr[i];
for(i=0;i<nright;i++)
right[i]=arr[nleft+i];
mergesort(left,nleft);
mergesort(right,nright);
merge(arr,left,right,nleft,nright);
return;
}
}*/
int compare(const void* a, const void* b)
{
if(*(long long int*)a - *(long long int*)b < 0)
return -1;
if(*(long long int*)a - *(long long int*)b == 0)
return 0;
if(*(long long int*)a - *(long long int*)b > 0)
return 1;
}
long int main()
{
long int p,q,r,i,flag,kx,kz;long int j,m;long long int ans,mod=1000000007;int t;
scanf("%d",&t);
while(t--)
{
ans=0;
scanf("%ld %ld %ld",&p,&q,&r);
if(p<r)
flag=p;
else
flag=r;
for(i=0;i<p;i++)
scanf("%lld",&x[i]);
for(i=0;i<q;i++)
scanf("%lld",&y[i]);
for(i=0;i<r;i++)
scanf("%lld",&z[i]);//printf("y");
//mergesort(x,p);
//mergesort(y,q);
//mergesort(z,r);//printf("k");
qsort(x,p,sizeof(long long int),compare);
qsort(y,q,sizeof(long long int),compare);
qsort(z,r,sizeof(long long int),compare);
for(i=0;i<flag;i++)
pro[i]=x[i]*z[i];
sumx[0]=x[0];
sumy[0]=z[0];
for(i=1;i<flag;i++)
pro[i]=pro[i-1]+pro[i];
for(i=1;i<p;i++)
sumx[i]=sumx[i-1]+x[i];
for(i=1;i<r;i++)
sumy[i]=sumy[i-1]+z[i];
/*printf("\n");
for(i=0;i<p;i++)
printf("%ld ",x[i]);
printf("\n");
for(i=0;i<q;i++)
printf("%ld ",y[i]);
printf("\n");
for(i=0;i<r;i++)
printf("%ld ",z[i]);*/
for(i=0;i<q;i++)
{
kx=binarysearch(x,y[i],p-1,0);//printf("kx is %d",kx);
kz=binarysearch(z,y[i],r-1,0);//printf("kz is %d",kz);
while(x[kx]<=y[i]&&kx<p)
kx++;
if(kx==p)
kx--;
while(z[kz]<=y[i]&&kz<r)
kz++;
if(kz==r)
kz--;
if((kx==0&&x[kx]>y[i])||(kz==0&&z[kz]>y[i]))
{
ans=(0+ans)%mod;
continue;
}
if(x[kx]>y[i]&&kx!=0)
kx--;
if(z[kz]>y[i]&&kz!=0)
kz--;
//ans=(((((kz+1)%1000000007*sumx[kx]%1000000007)%1000000007)+((((kx+1)%1000000007*sumy[kz]%100000000007)+((((((kx+1)%1000000007*(kz+1)%1000000007)%1000000007)*y[i]%1000000007)%1000000007)*y[i]%1000000007)%1000000007+ans)%1000000007;
ans=((((((((((kz+1)%mod)*(sumx[kx]%mod))%mod)+((((kx+1)%mod)*(sumy[kz]%mod))%mod))%mod)*(y[i]%mod))%mod)%mod)+((((sumx[kx]%mod)*(sumy[kz]%mod))%mod)%mod)+(((((((((kx+1)%mod)*((kz+1)%mod))%mod)*(y[i]%mod))%mod)*(y[i]%mod))%mod)%mod)+ans%mod)%mod;
//printf("tt");
}
//printf("%lld\n",ans);
printf("%lld\n",ans);
ans=0;
}
}
due to lack of karma i cannot upload the image of my code . please help