Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.49 KB | None | 0 0
  1. // Complete the activityNotifications function below.
  2. set<pair<int, int> > hi;
  3. set<pair<int, int>, greater<pair<int, int> > > lo;
  4. int szlo, szhi;
  5. void balance() {
  6. szlo = lo.size(), szhi = hi.size();
  7. while (szhi - szlo > 1) { //hi kommbe
  8. lo.insert(*hi.begin());
  9. hi.erase(hi.begin());
  10. szlo = lo.size(), szhi = hi.size();
  11. }
  12. while (szlo - szhi > 1) { //lo kombe
  13. hi.insert(*lo.begin());
  14. lo.erase(lo.begin());
  15. szlo = lo.size(), szhi = hi.size();
  16. }
  17. }
  18. void delet(int val, int id) {
  19. auto it = lo.find(make_pair(val, id));
  20. if (it != lo.end())
  21. lo.erase(it);
  22. else {
  23. auto it = hi.find(make_pair(val, id));
  24. if (it != hi.end()) hi.erase(it);
  25. }
  26. balance();
  27. }
  28. void insert(int val, int id) {
  29. lo.insert(make_pair(val, id));
  30. balance();
  31. }
  32. int find_median() {
  33. int szlo = lo.size(), szhi = hi.size();
  34. if (szlo > szhi) {
  35. return lo.begin()->first * 2;
  36. } else if (szhi > szlo) {
  37. return hi.begin()->first * 2;
  38. } else {
  39. return lo.begin()->first + hi.begin()->first;
  40. }
  41. }
  42. int activityNotifications(vector<int> ex, int d) {
  43. int res = 0;
  44. for (int i = 0; i < d; i++) insert(ex[i], i);
  45. for (int i = d; i < ex.size(); i++) {
  46. int md = find_median();
  47. //cout << "median " << double(md / 2.0) << endl;
  48. if (ex[i] >= md) res++;
  49. insert(ex[i], i);
  50. delet(ex[i - d], i - d);
  51. }
  52. return res;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement