Friday, December 14, 2018

[Codeforces] D. Devu and his Brother

Author            : Dipu Kumar Mohanto 
                    CSE, Batch - 6
                    BRUR.
Problem Statement : D. Devu and his Brother
                    Codeforces Round #251 (Div. 2)
Source            : Codeforces
Category          : Search
Algorithm         : Ternary Search
Verdict           : Accepted 
  1. #include <bits/stdc++.h>  
  2.    
  3. using namespace std;  
  4.    
  5. static const int MAXN = 1e5 + 5;  
  6.    
  7. int n, m;  
  8. long long A[MAXN], B[MAXN];  
  9. long long SA[MAXN], SB[MAXN];  
  10.    
  11. long long f(long long num)  
  12. {  
  13.     int nn = lower_bound(A+1, A+n+1, num) - A;  
  14.     long long changeA = num*(nn-1) - SA[nn-1];  
  15.     int mm = lower_bound(B+1, B+m+1, num+1) - B;  
  16.     long long changeB = 0;  
  17.     if (mm <= m) changeB = SB[m] - SB[mm-1] - num*(m-mm+1);  
  18.     return changeA + changeB;  
  19. }  
  20.    
  21. long long ternary()  
  22. {  
  23.     long long low = 1;  
  24.     long long high = 1e9;  
  25.     while (true)  
  26.     {  
  27.         if (high - low < 3)  
  28.         {  
  29.             long long f1 = f(low);  
  30.             long long f2 = f(low+1);  
  31.             long long f3 = f(high);  
  32.             return min(f1, min(f2, f3));  
  33.         }  
  34.         long long midA = low + (high - low)/3;  
  35.         long long midB = high - (high - low)/3;  
  36.         if (f(midA) <= f(midB)) high = midB;  
  37.         else low = midA;  
  38.     }  
  39. }  
  40.    
  41. int main()  
  42. {  
  43.     cin >> n >> m;  
  44.     for (int i = 1; i <= n; i++) cin >> A[i];  
  45.     sort(A+1, A+n+1);  
  46.     for (int i = 1; i <= n; i++) SA[i] = SA[i-1] + A[i];  
  47.     for (int i = 1; i <= m; i++) cin >> B[i];  
  48.     sort(B+1, B+m+1);  
  49.     for (int i = 1; i <= m; i++) SB[i] = SB[i-1] + B[i];  
  50.     cout << ternary();  
  51. }  

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.