Advertisement
Guest User

Untitled

a guest
Aug 24th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.57 KB | None | 0 0
  1. class DinnerPlates {
  2. public:
  3. vector<stack<int>> stacks;
  4. set <int> non_empty_stacks;
  5. int capacity_;
  6. DinnerPlates(int capacity) {
  7. capacity_ = capacity;
  8. }
  9.  
  10. void push(int val) {
  11. if (non_empty_stacks.empty()) {
  12. stack<int> S;
  13. S.push(val);
  14. stacks.push_back(S);
  15. if (capacity_ > 1) {
  16. non_empty_stacks.insert((int)stacks.size() - 1);
  17. }
  18. } else {
  19. int stack_index = *non_empty_stacks.begin();
  20. stacks[stack_index].push(val);
  21. if (stacks[stack_index].size() < capacity_) {
  22. non_empty_stacks.insert(stack_index);
  23. } else
  24. non_empty_stacks.erase(stack_index);
  25. }
  26. }
  27.  
  28. int pop() {
  29. if (stacks.empty()) {
  30. return -1;
  31. }
  32. int val = stacks.back().top();
  33. stacks.back().pop();
  34. if (stacks.back().empty()) {
  35. stacks.pop_back();
  36. } else {
  37. non_empty_stacks.insert((int)stacks.size() - 1);
  38. }
  39. return val;
  40. }
  41.  
  42. int popAtStack(int index) {
  43. if (stacks[index].empty())
  44. return -1;
  45. int val = stacks[index].top();
  46. stacks[index].pop();
  47. non_empty_stacks.insert(index);
  48. return val;
  49. }
  50. };
  51.  
  52. /**
  53. * Your DinnerPlates object will be instantiated and called as such:
  54. * DinnerPlates* obj = new DinnerPlates(capacity);
  55. * obj->push(val);
  56. * int param_2 = obj->pop();
  57. * int param_3 = obj->popAtStack(index);
  58. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement