fork download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5.  
  6. int main() {
  7. ios_base::sync_with_stdio(false);
  8. int t = 0;
  9. cin>>t;
  10.  
  11. while (t--)
  12. {
  13. int p = 0, q = 0, r = 0;
  14. cin>>p>>q>>r;
  15. long long int A[p], B[q], C[r], sumA[p], sumC[r];
  16. for(int I=0;I<p;I++)
  17. {
  18. cin>>A[I];
  19. }
  20. sort(A, A+p);
  21.  
  22. sumA[0] = A[0];
  23. for(int I=1;I<p;I++)
  24. {
  25. sumA[I] = sumA[I-1]+A[I];
  26. }
  27. for(int I=0;I<q;I++)
  28. {
  29. cin>>B[I];
  30. }
  31.  
  32. for(int I=0;I<r;I++)
  33. {
  34. cin>>C[I];
  35. }
  36. sort(C, C+r);
  37.  
  38. sumC[0] = C[0];
  39. for(int I=1;I<r;I++)
  40. {
  41. sumC[I] = sumC[I-1]+C[I];
  42. }
  43.  
  44. long long int main_Res = 0, temp_Res = 0;
  45. for(int I=0;I<q;I++)
  46. {
  47. temp_Res = 0;
  48. long long int * indexA = upper_bound(A, A+p, B[I])-1;
  49. long long int * indexC = upper_bound(C, C+r, B[I])-1;
  50. if(indexA<=0 || indexC <= 0)
  51. {
  52. main_Res +=0;
  53. continue;
  54. }
  55. int actual_indexA = std::distance(A,indexA);
  56. int actual_indexC = std::distance(C,indexC);
  57. //cout<<"indexA:"<<(*indexA)<<":::indexC:"<<x<<"\n";
  58. temp_Res+=((( (actual_indexA+1) * B[I])%1000000007+(sumA[actual_indexA])%1000000007 )%1000000007) * ((((actual_indexC+1) * B[I])%1000000007+(sumC[actual_indexC])%1000000007)%1000000007);
  59. main_Res += temp_Res%1000000007;
  60. main_Res = main_Res%1000000007;
  61. }
  62. cout<<main_Res%1000000007<<"\n";
  63. }
  64. return 0;
  65. }
Success #stdin #stdout 0s 16064KB
stdin
1 
3 1 3
1 2 3
5
4 5 6
stdout
399