Dinner Plate Stacks LeetCode solution in C++
1class DinnerPlates {2public:3map<int, stack<int>> mp;4set<int> empty;5int cap;6DinnerPlates(int capacity) {7this->cap = capacity;8}910void push(int val) {11if (empty.size() == 0) {12empty.insert(mp.size());13}14mp[*empty.begin()].push(val);15if (mp[*empty.begin()].size() == cap) {16empty.erase(empty.begin());17}18}19int pop() {20if (mp.size() == 0) {21return -1;22}23int index = mp.rbegin()->first;24int val = mp[index].top();25mp[index].pop();26empty.insert(index);27if (mp[index].size() == 0) {28mp.erase(index);29}30return val;31}3233int popAtStack(int index) {34if (mp.size() == 0 || mp.find(index) == mp.end()) {35return -1;36}37int val = mp[index].top();38mp[index].pop();39empty.insert(index);40if (mp[index].size() == 0) {41mp.erase(index);42}43return val;44}45};