Advertisement
dipBRUR

Untitled

Jun 4th, 2017
555
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.72 KB | None | 0 0
  1. /**
  2.  * Author          : Dipu Kumar Mohanto (Dip)
  3.  *                   CSE, BRUR.
  4.  *
  5.  * Problem         : Find the Running Median
  6.  * Algorithm       : Maximum Heap & Minimum Heap (STL)
  7.  * Compleixty      :
  8.  * Category        : find median, sorting
  9.  *
  10.  * Source          : Hacker Rank
  11.  *
  12.  * Verdict         : Accepted
  13.  *
  14.  * Date            :
  15.  * E-mail          : dipukumarmohanto1@gmail.com
  16.  ***/
  17.  
  18. #include <bits/stdc++.h>
  19.  
  20. using namespace std;
  21.  
  22. priority_queue <int, vector <int>, less <int> > maxHeap;
  23. priority_queue <int, vector <int>, greater <int> > minHeap;
  24.  
  25. int main()
  26. {
  27.     int n;
  28.     cin >> n;
  29.  
  30.     int fnum, snum;
  31.     double median;
  32.  
  33.     for (int f=0; f<2; f++)
  34.     {
  35.         int num;
  36.         cin >> num;
  37.  
  38.         if (f==0)
  39.         {
  40.             fnum = num;
  41.  
  42.             median = (double)num;
  43.  
  44.             printf("%.1lf\n", median);
  45.  
  46. //            continue;
  47.         }
  48.  
  49.         else if (f==1)
  50.         {
  51.             snum = num;
  52.  
  53.             median = ((double)num + (double)fnum) / 2.0;
  54.  
  55.             printf("%.1lf\n", median);
  56.  
  57. //            continue;
  58.         }
  59.     }
  60.  
  61.  
  62.     int maxNum = max(fnum, snum);
  63.     int minNum = min(fnum, snum);
  64.  
  65.     maxHeap.push(minNum);
  66.     minHeap.push(maxNum);
  67.  
  68.     for (int f=2; f<n; f++)
  69.     {
  70.         int num;
  71.         cin >> num;
  72.  
  73.         if (maxHeap.top() > num)
  74.         {
  75.             maxHeap.push(num);
  76.         }
  77.  
  78.         else
  79.         {
  80.             minHeap.push(num);
  81.         }
  82.  
  83.         int minHeapLen = minHeap.size();
  84.         int maxHeapLen = maxHeap.size();
  85.  
  86.         if (minHeapLen > maxHeapLen)
  87.         {
  88.             int m = minHeap.top();
  89.             minHeap.pop();
  90.  
  91.             maxHeap.push(m);
  92.         }
  93.  
  94.         else if (maxHeapLen > minHeapLen)
  95.         {
  96.             int m = maxHeap.top();
  97.             maxHeap.pop();
  98.  
  99.             minHeap.push(m);
  100.         }
  101.  
  102.         minHeapLen = minHeap.size();
  103.         maxHeapLen = maxHeap.size();
  104.  
  105.         //cout << minHeapLen << " " << maxHeapLen << endl;
  106.  
  107.         // ans
  108.         if (minHeapLen > maxHeapLen)
  109.         {
  110.             median = (double)minHeap.top();
  111.         }
  112.  
  113.         else if (maxHeapLen > minHeapLen)
  114.         {
  115.             median = (double)maxHeap.top();
  116.         }
  117.  
  118.         else if (minHeapLen == maxHeapLen)
  119.         {
  120.             double num1 = (double)minHeap.top();
  121.             double num2 = (double)maxHeap.top();
  122.  
  123.             median = (num1 + num2) / 2.0;
  124.         }
  125.  
  126.         printf("%.1lf\n", median);
  127.     }
  128.     return 0;
  129. }
  130. /**************************************
  131. Input:
  132. 6
  133. 12
  134. 4
  135. 5
  136. 3
  137. 8
  138. 7
  139.  
  140. Output:
  141. 12.0
  142. 8.0
  143. 5.0
  144. 4.5
  145. 5.0
  146. 6.0
  147.  
  148.  
  149. Input:
  150. 2
  151. 5
  152. 3
  153.  
  154. Output:
  155. 2.0
  156. 3.5
  157. 3.0
  158.  
  159. ***********************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement