Advertisement
Guest User

Martin

a guest
Apr 5th, 2020
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.39 KB | None | 0 0
  1. int activityNotifications(vector<int> expenditure, int d) {
  2.     multiset<int> sm; // max pq
  3.     multiset<int> bi; // min pq
  4.     int noti = 0;
  5.     int i = 0;
  6.     int mD;
  7.     bool odd = d % 2 == 1;
  8.  
  9.     while (i < d) {
  10.         sm.insert(expenditure[i]);
  11.         ++i;
  12.     }
  13.  
  14.     for (int j = 0; j < d / 2; ++j) {
  15.         bi.insert(*prev(sm.end()));
  16.         sm.erase(prev(sm.end()));
  17.     }
  18.  
  19.     while (i < expenditure.size()) {
  20.         if (odd) {
  21.             mD = *(prev(sm.end())); // since I always have the one more in sm;
  22.             mD *= 2;
  23.         }
  24.         else
  25.             mD = *(prev(sm.end())) + *(bi.begin());
  26.  
  27.         if (expenditure[i] >= mD)
  28.             ++noti;
  29.  
  30.         auto it = sm.find(expenditure[i-d]);
  31.         if (it != sm.end())
  32.             sm.erase(it);
  33.         else
  34.             bi.erase(expenditure[i-d]);
  35.  
  36.         if (expenditure[i] <= *(bi.begin()))
  37.             sm.insert(expenditure[i]);
  38.         else
  39.             bi.insert(expenditure[i]);
  40.  
  41.         // balance
  42.         while (sm.size() < bi.size()) { // at the end sm has one more or equal elements
  43.             sm.insert(*(bi.begin()));
  44.             bi.erase(bi.begin());
  45.         }
  46.         while (sm.size() > bi.size() + 1) { // at the end sm has one more or equal elements
  47.             bi.insert(*prev(sm.end()));
  48.             sm.erase(prev(sm.end()));
  49.         }
  50.  
  51.         ++i;
  52.     }
  53.  
  54.     return noti;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement