https://www.codechef.com/problems/SUMQ
// aarifshuvo ``CSEJU
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define SZ(x) ((int)(x).size())
#define scl(x) scanf("%lld", &x)
#define scll(x,y) scanf("%lld %lld", &x, &y)
#define all(x) (x).begin(),(x).end()
#define mem(a,d) memset(a,d,sizeof a)
#define REP(i,n) for(int i=0;i<n;i++)
#define REV(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define pri(a) cout<<a<<endl
#define prii(a,b) cout<<a<<" "<<b<<endl
using namespace std;
#define inf 12345678912
#define sz 100007
#define mod 1000000007
ll arx[sz];
ll cmx[sz];
ll ary[sz];
ll arz[sz];
ll cmz[sz];
ll bsrch(ll ar[], ll val, ll lo, ll hi)
{
ll ans = 0;
while(lo<=hi)
{
ll md = (lo+hi)/2;
if(ar[md]<=val) ans = md, lo = md+1;
else hi = md-1;
}
return ans;
}
int main()
{
ll t,s,x,y,z;
scl(t);
while(t--)
{
ll smx = 0, smz = 0;
scll(x,y);
scl(z);
cmx[0] = 0;
FOR(i,1,x) scl(arx[i]);
sort(arx+1,arx+x+1);
FOR(i,1,x) cmx[i] = (cmx[i-1] + arx[i])%mod;
FOR(i,1,y) scl(ary[i]);
cmz[0] = 0;
FOR(i,1,z) scl(arz[i]);
sort(arz+1,arz+z+1);
FOR(i,1,z) cmz[i] = (cmz[i-1] + arz[i])%mod;
ll idx,idz,tmp, res = 0;
FOR(i,1,y)
{
tmp = ary[i];
//arx e tmp er che choto kon idx prjnto ase
idx = upper_bound(arx+1,arx+x+1,tmp) - arx;
idz = upper_bound(arz+1,arz+z+1,tmp) - arz;
idx--; idz--; // becoz right most index of tmp<=arx[i]
// idx = bsrch(arx, tmp, 1, x);
// idz = bsrch(arz, tmp, 1 , z);
smx = cmx[idx];
smz = cmz[idz];
res = ( res + ( (idx*tmp)%mod + smx)%mod * ( (idz*tmp)%mod + smz)%mod ) % mod;
}
pri(res);
}
return 0;
}
No comments:
Post a Comment