Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Complete the activityNotifications function below.
- set<pair<int, int> > hi;
- set<pair<int, int>, greater<pair<int, int> > > lo;
- int szlo, szhi;
- void balance() {
- szlo = lo.size(), szhi = hi.size();
- while (szhi - szlo > 1) { //hi kommbe
- lo.insert(*hi.begin());
- hi.erase(hi.begin());
- szlo = lo.size(), szhi = hi.size();
- }
- while (szlo - szhi > 1) { //lo kombe
- hi.insert(*lo.begin());
- lo.erase(lo.begin());
- szlo = lo.size(), szhi = hi.size();
- }
- }
- void delet(int val, int id) {
- auto it = lo.find(make_pair(val, id));
- if (it != lo.end())
- lo.erase(it);
- else {
- auto it = hi.find(make_pair(val, id));
- if (it != hi.end()) hi.erase(it);
- }
- balance();
- }
- void insert(int val, int id) {
- lo.insert(make_pair(val, id));
- balance();
- }
- int find_median() {
- int szlo = lo.size(), szhi = hi.size();
- if (szlo > szhi) {
- return lo.begin()->first * 2;
- } else if (szhi > szlo) {
- return hi.begin()->first * 2;
- } else {
- return lo.begin()->first + hi.begin()->first;
- }
- }
- int activityNotifications(vector<int> ex, int d) {
- int res = 0;
- for (int i = 0; i < d; i++) insert(ex[i], i);
- for (int i = d; i < ex.size(); i++) {
- int md = find_median();
- //cout << "median " << double(md / 2.0) << endl;
- if (ex[i] >= md) res++;
- insert(ex[i], i);
- delet(ex[i - d], i - d);
- }
- return res;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement