#include<iostream>
using namespace std;
const int MAX_ALLOWED_SIZE = 1000000;
template <class T>
class MyStack{
T *a;
int *min, *max;
int top;
int size;
public:
MyStack(int s=MAX_ALLOWED_SIZE)
{
//this.size gives this error: request for member `size' in `this', which is of non-class type `MyStack* const'
size = s;
a = new T [size];
min = new int [size];
max = new int [size];
top = -1;
}
void push(T i)
{
if(top == size-1)
{
cout<<"Overflow error"<<endl;
}
//if stack has space
else
{
if(top == -1)
{
top++;
min[top] = top;
max[top] = top;
a[top] = i;
}
else if(i <= a[min[top]])
{
top++;
min[top] = top;
a[top] = i;
max[top] = max[top-1];
}
else if(i >= a[max[top]])
{
top++;
min[top] = min[top-1];
a[top] = i;
max[top] = top;
}
else
{
top++;
min[top] = min[top-1];
a[top] = i;
max[top] = max[top-1];
}
}
}
T pop()
{
if(stackEmpty())
{
cout<<"Underflow error"<<endl;
return NULL;
}else return a[top--];
}
T maxm()
{
//cout<<"called"<<endl;
if(!stackEmpty())
{
//cout<<max[top]<<" = " <<a[max[top]]<<endl;
return a[max[top]];
}
cout<<"called\n";
return NULL;
}
T minm()
{
//cout<<"called"<<endl;
if(!stackEmpty())
{
cout<<"a["<<min[top]<<"] = " <<a[min[top]]<<endl;
return a[min[top]];
}
return NULL;
}
T minmm()
{
cout<<"called\t";
if(!stackEmpty())
{
cout<<"a["<<min[top]<<"] = " <<a[min[top]]<<endl;
return a[min[top]];
}
return NULL;
}
bool stackEmpty()
{
if(top == -1) return true;
return false;
}
void printStack()
{
T s = top+1;
while(s--)
{
printf("a[%d] = %d\n",s,a[s]);
}
}
};
int main()
{
MyStack<int> s(5);
int t;
while(true)
{
scanf("%d",&t);
s.push(t);
cout<<"min = "<<s.minm()<<endl;
cout<<"min = "<<s.minmm()<<endl;
if(t==-1) break;
}
cout<<"----------"<<endl;
s.printStack();
}
I2luY2x1ZGU8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYX0FMTE9XRURfU0laRSA9IDEwMDAwMDA7Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4KY2xhc3MgTXlTdGFja3sKICAgIFQgKmE7CiAgICBpbnQgKm1pbiwgKm1heDsKICAgIGludCB0b3A7CiAgICBpbnQgc2l6ZTsKCiAgICBwdWJsaWM6CiAgICAgICAgTXlTdGFjayhpbnQgcz1NQVhfQUxMT1dFRF9TSVpFKQogICAgICAgIHsKICAgICAgICAgICAgLy90aGlzLnNpemUgZ2l2ZXMgdGhpcyBlcnJvcjogcmVxdWVzdCBmb3IgbWVtYmVyIGBzaXplJyBpbiBgdGhpcycsIHdoaWNoIGlzIG9mIG5vbi1jbGFzcyB0eXBlIGBNeVN0YWNrKiBjb25zdCcKICAgICAgICAgICAgc2l6ZSA9IHM7CiAgICAgICAgICAgIGEgPSBuZXcgVCBbc2l6ZV07CiAgICAgICAgICAgIG1pbiA9IG5ldyBpbnQgW3NpemVdOwogICAgICAgICAgICBtYXggPSBuZXcgaW50IFtzaXplXTsKICAgICAgICAgICAgdG9wID0gLTE7CiAgICAgICAgfQogICAgICAgIHZvaWQgcHVzaChUIGkpCiAgICAgICAgewogICAgICAgICAgICBpZih0b3AgPT0gc2l6ZS0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0PDwiT3ZlcmZsb3cgZXJyb3IiPDxlbmRsOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvL2lmIHN0YWNrIGhhcyBzcGFjZQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKHRvcCA9PSAtMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b3ArKzsKICAgICAgICAgICAgICAgICAgICBtaW5bdG9wXSA9IHRvcDsKICAgICAgICAgICAgICAgICAgICBtYXhbdG9wXSA9IHRvcDsKICAgICAgICAgICAgICAgICAgICBhW3RvcF0gPSBpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZihpIDw9IGFbbWluW3RvcF1dKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRvcCsrOwogICAgICAgICAgICAgICAgICAgIG1pblt0b3BdID0gdG9wOwogICAgICAgICAgICAgICAgICAgIGFbdG9wXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgbWF4W3RvcF0gPSBtYXhbdG9wLTFdOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGVsc2UgaWYoaSA+PSBhW21heFt0b3BdXSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b3ArKzsKICAgICAgICAgICAgICAgICAgICBtaW5bdG9wXSA9IG1pblt0b3AtMV07CiAgICAgICAgICAgICAgICAgICAgYVt0b3BdID0gaTsKICAgICAgICAgICAgICAgICAgICBtYXhbdG9wXSA9IHRvcDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9wKys7CiAgICAgICAgICAgICAgICAgICAgbWluW3RvcF0gPSBtaW5bdG9wLTFdOwogICAgICAgICAgICAgICAgICAgIGFbdG9wXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgbWF4W3RvcF0gPSBtYXhbdG9wLTFdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBUIHBvcCgpCiAgICAgICAgewogICAgICAgICAgICBpZihzdGFja0VtcHR5KCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdXQ8PCJVbmRlcmZsb3cgZXJyb3IiPDxlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgIH1lbHNlIHJldHVybiBhW3RvcC0tXTsKICAgICAgICB9CgogICAgICAgIFQgbWF4bSgpCiAgICAgICAgewogICAgICAgICAgICAvL2NvdXQ8PCJjYWxsZWQiPDxlbmRsOwogICAgICAgICAgICBpZighc3RhY2tFbXB0eSgpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAvL2NvdXQ8PG1heFt0b3BdPDwiID0gIiA8PGFbbWF4W3RvcF1dPDxlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIGFbbWF4W3RvcF1dOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGNvdXQ8PCJjYWxsZWRcbiI7CiAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgIH0KCiAgICAgICAgVCBtaW5tKCkKICAgICAgICB7CiAgICAgICAgICAgIC8vY291dDw8ImNhbGxlZCI8PGVuZGw7CiAgICAgICAgICAgIGlmKCFzdGFja0VtcHR5KCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdXQ8PCJhWyI8PG1pblt0b3BdPDwiXSA9ICIgPDxhW21pblt0b3BdXTw8ZW5kbDsKICAgICAgICAgICAgICAgIHJldHVybiBhW21pblt0b3BdXTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICB9CgogICAgICAgIFQgbWlubW0oKQogICAgICAgIHsKICAgICAgICAgICAgY291dDw8ImNhbGxlZFx0IjsKICAgICAgICAgICAgaWYoIXN0YWNrRW1wdHkoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291dDw8ImFbIjw8bWluW3RvcF08PCJdID0gIiA8PGFbbWluW3RvcF1dPDxlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIGFbbWluW3RvcF1dOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgIH0KCiAgICAgICAgYm9vbCBzdGFja0VtcHR5KCkKICAgICAgICB7CiAgICAgICAgICAgIGlmKHRvcCA9PSAtMSkgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHZvaWQgcHJpbnRTdGFjaygpCiAgICAgICAgewogICAgICAgICAgICBUIHMgPSB0b3ArMTsKICAgICAgICAgICAgd2hpbGUocy0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmludGYoImFbJWRdID0gJWRcbiIscyxhW3NdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KfTsKCmludCBtYWluKCkKewogICAgTXlTdGFjazxpbnQ+IHMoNSk7CiAgICBpbnQgdDsKCiAgICB3aGlsZSh0cnVlKQogICAgewogICAgICAgIHNjYW5mKCIlZCIsJnQpOwogICAgICAgIHMucHVzaCh0KTsKICAgICAgICBjb3V0PDwibWluID0gIjw8cy5taW5tKCk8PGVuZGw7CiAgICAgICAgY291dDw8Im1pbiA9ICI8PHMubWlubW0oKTw8ZW5kbDsKCiAgICAgICAgaWYodD09LTEpIGJyZWFrOwoKICAgIH0KCiAgICBjb3V0PDwiLS0tLS0tLS0tLSI8PGVuZGw7CiAgICBzLnByaW50U3RhY2soKTsKfQo=