fork download
  1. //assuming both arrays are sorted and have all elements as distinct
  2. //even the combination of these array (A + B) elements are all distinct.....
  3. #include <bits/stdc++.h>
  4. using namespace std ;
  5. typedef long long int ll;
  6. #define rep(i, l, r) for ((i) = (l); (i) <=(r); (i)++)
  7. ll L[2000][2000];
  8. bool compare(const pair<ll,ll>&p1, const pair<ll,ll>&p2)
  9. {
  10. if(p1.first < p2.first) return true;
  11. if(p1.first == p2.first) return p1.second < p2.second;
  12. return false;
  13. }
  14. int main()
  15. {
  16.  
  17. ll n;cin>>n;
  18. ll i = 1 ;
  19. vector< pair <ll,ll> > v;
  20. while(i<=n)
  21. {
  22. ll x;
  23. cin>>x; ll y = 1 ;
  24. v.push_back( make_pair(x,y) );
  25. i++;
  26. }
  27. ll m;cin>>m ;
  28. i=1;
  29. while(i<=m)
  30. {
  31. ll x ; cin>>x; ll y = 0 ;
  32. v.push_back( make_pair(x,y) );
  33. i++;
  34. }
  35.  
  36. sort(v.begin(),v.end(),compare);
  37. n=n+m ;
  38. L[n-1][n-2]=2;
  39. ll j;
  40. j=n-2;
  41. while(j>=1)
  42. {
  43. // cout<<v[j].first<<"\n";
  44. ll l1=n-1;
  45. ll l2=0;
  46. ll i3 = j-1;
  47. ll i4=j+1;
  48. // cout<<i4<<"\n";
  49. while(i4<=n-1)
  50. {
  51. // cout<<i4<<" "<<v[i4].second ;
  52. //cout<<"\n";
  53. if(v[i4].second==1)
  54. {
  55. l1=i4;
  56. i4=1e18;
  57. }
  58.  
  59.  
  60. i4++;
  61. }
  62.  
  63. // cout<<l1<<"\n";
  64. while(i3>=0)
  65. {
  66.  
  67. if(v[i3].second==1)
  68. {
  69. l2=i3;
  70. i3=-1e18;
  71. }
  72.  
  73.  
  74. i3--;
  75. }
  76.  
  77.  
  78.  
  79.  
  80. // cout<<l1<<" "<<l2;
  81. // cout<<"\n";
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89. ll i1=j-1;
  90. ll i2=j+1;
  91. while(i1>=l2 && i2<=l1)
  92. {
  93. ll mg = v[i1].first+v[i2].first;
  94.  
  95.  
  96.  
  97.  
  98. if((2*v[j].first)==mg)
  99. {ll ream = 2 ;
  100. L[i1][j] = max(ream,L[j][i2]) + 1 ;
  101. cout<<i1<<" "<<j<<" "<<L[i1][j];
  102. cout<<"\n";
  103. i1--;
  104. i2++;
  105. }
  106. else if(2*v[j].first<mg)
  107. {//cout<<"lol!!!";
  108. i1--;
  109. }
  110. else
  111. {
  112. i2++;
  113. }
  114. }
  115.  
  116. j--;
  117. }
  118.  
  119.  
  120.  
  121.  
  122.  
  123. ll answer = 3-1;
  124. rep(i,0,n-1)
  125. {
  126. rep(j,0,n-1)
  127. {
  128. answer = max(answer,L[i][j]) ;
  129. }
  130. }
  131.  
  132.  
  133. cout<<"Final Answer : ----- >>>>";
  134. cout<<answer ;
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141. /*
  142.   5
  143. 2 5 6 8 9
  144. 5
  145. 1 4 7 12 14
  146.   */
  147.  
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181. return 0 ;
  182. }
Success #stdin #stdout 0s 4488KB
stdin
5
1 4 5 8 9
4
2 7 10 15
stdout
5 6 3
4 5 4
Final Answer :   ----- >>>>4