-
Notifications
You must be signed in to change notification settings - Fork 110
/
superStack.cpp
64 lines (54 loc) · 1.46 KB
/
superStack.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
Fractal Analytics IITK 2018
Maintain a stack which can handle the following operations:
"push k": Push k at the top of stack
"pop": Remove the topmost element from the stack
"inc e k": Add k to the bottom e elements of the stack
pop is never called on an empty stack.
Given a vector of strings where each string is an operation as
defined above, print the top element after every operation. If
the stack is empty at some point, print "EMPTY" instead.
1 <= #operations <= 1E5
1 <= k <= size of stack at the time of operation
*/
#include <bits/stdc++.h>
using namespace std;
void superStack(vector<string> ops) {
int n = ops.size();
vector<int> a(n), b(n);
int k = 0;
for (string op : ops) {
stringstream strin(op);
string optype;
strin >> optype;
if (optype == "push") {
int x;
strin >> x;
a[k++] = x;
}
if (optype == "pop") {
if (--k) b[k - 1] += b[k];
b[k] = 0;
}
if (optype == "inc") {
int x, y;
strin >> x >> y;
b[x - 1] += y;
}
if (not k) {
cout << "EMPTY";
}
else {
cout << a[k - 1] + b[k - 1];
}
cout << " ";
}
}
int main() {
vector<string> operations = {
"push 4", "pop", "push 3", "push 5", "inc 2 1",
"pop", "push 5", "push -1", "inc 1 5", "pop"
};
superStack(operations);
return 0;
}