#include<iostream>
#include<cstdio>
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;
}
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+CiNpbmNsdWRlPGNzdGRpbz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApjb25zdCBpbnQgTUFYX0FMTE9XRURfU0laRSA9IDEwMDAwMDA7CiAKdGVtcGxhdGUgPGNsYXNzIFQ+CmNsYXNzIE15U3RhY2t7CiAgICBUICphOwogICAgaW50ICptaW4sICptYXg7CiAgICBpbnQgdG9wOwogICAgaW50IHNpemU7CiAKICAgIHB1YmxpYzoKICAgICAgICBNeVN0YWNrKGludCBzPU1BWF9BTExPV0VEX1NJWkUpCiAgICAgICAgewogICAgICAgICAgICAvL3RoaXMuc2l6ZSBnaXZlcyB0aGlzIGVycm9yOiByZXF1ZXN0IGZvciBtZW1iZXIgYHNpemUnIGluIGB0aGlzJywgd2hpY2ggaXMgb2Ygbm9uLWNsYXNzIHR5cGUgYE15U3RhY2sqIGNvbnN0JwogICAgICAgICAgICBzaXplID0gczsKICAgICAgICAgICAgYSA9IG5ldyBUIFtzaXplXTsKICAgICAgICAgICAgbWluID0gbmV3IGludCBbc2l6ZV07CiAgICAgICAgICAgIG1heCA9IG5ldyBpbnQgW3NpemVdOwogICAgICAgICAgICB0b3AgPSAtMTsKICAgICAgICB9CiAgICAgICAgdm9pZCBwdXNoKFQgaSkKICAgICAgICB7CiAgICAgICAgICAgIGlmKHRvcCA9PSBzaXplLTEpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdXQ8PCJPdmVyZmxvdyBlcnJvciI8PGVuZGw7CiAgICAgICAgICAgIH0KIAogICAgICAgICAgICAvL2lmIHN0YWNrIGhhcyBzcGFjZQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGlmKHRvcCA9PSAtMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b3ArKzsKICAgICAgICAgICAgICAgICAgICBtaW5bdG9wXSA9IHRvcDsKICAgICAgICAgICAgICAgICAgICBtYXhbdG9wXSA9IHRvcDsKICAgICAgICAgICAgICAgICAgICBhW3RvcF0gPSBpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSBpZihpIDw9IGFbbWluW3RvcF1dKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHRvcCsrOwogICAgICAgICAgICAgICAgICAgIG1pblt0b3BdID0gdG9wOwogICAgICAgICAgICAgICAgICAgIGFbdG9wXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgbWF4W3RvcF0gPSBtYXhbdG9wLTFdOwogICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICBlbHNlIGlmKGkgPj0gYVttYXhbdG9wXV0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgdG9wKys7CiAgICAgICAgICAgICAgICAgICAgbWluW3RvcF0gPSBtaW5bdG9wLTFdOwogICAgICAgICAgICAgICAgICAgIGFbdG9wXSA9IGk7CiAgICAgICAgICAgICAgICAgICAgbWF4W3RvcF0gPSB0b3A7CiAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICB0b3ArKzsKICAgICAgICAgICAgICAgICAgICBtaW5bdG9wXSA9IG1pblt0b3AtMV07CiAgICAgICAgICAgICAgICAgICAgYVt0b3BdID0gaTsKICAgICAgICAgICAgICAgICAgICBtYXhbdG9wXSA9IG1heFt0b3AtMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAKICAgICAgICBUIHBvcCgpCiAgICAgICAgewogICAgICAgICAgICBpZihzdGFja0VtcHR5KCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGNvdXQ8PCJVbmRlcmZsb3cgZXJyb3IiPDxlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgIH1lbHNlIHJldHVybiBhW3RvcC0tXTsKICAgICAgICB9CiAKICAgICAgICBUIG1heG0oKQogICAgICAgIHsKICAgICAgICAgICAgLy9jb3V0PDwiY2FsbGVkIjw8ZW5kbDsKICAgICAgICAgICAgaWYoIXN0YWNrRW1wdHkoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgLy9jb3V0PDxtYXhbdG9wXTw8IiA9ICIgPDxhW21heFt0b3BdXTw8ZW5kbDsKICAgICAgICAgICAgICAgIHJldHVybiBhW21heFt0b3BdXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3V0PDwiY2FsbGVkXG4iOwogICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICB9CiAKICAgICAgICBUIG1pbm0oKQogICAgICAgIHsKICAgICAgICAgICAgLy9jb3V0PDwiY2FsbGVkIjw8ZW5kbDsKICAgICAgICAgICAgaWYoIXN0YWNrRW1wdHkoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291dDw8ImFbIjw8bWluW3RvcF08PCJdID0gIiA8PGFbbWluW3RvcF1dPDxlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIGFbbWluW3RvcF1dOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgIH0KIAogICAgICAgIFQgbWlubW0oKQogICAgICAgIHsKICAgICAgICAgICAgY291dDw8ImNhbGxlZFx0IjsKICAgICAgICAgICAgaWYoIXN0YWNrRW1wdHkoKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY291dDw8ImFbIjw8bWluW3RvcF08PCJdID0gIiA8PGFbbWluW3RvcF1dPDxlbmRsOwogICAgICAgICAgICAgICAgcmV0dXJuIGFbbWluW3RvcF1dOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgIH0KIAogICAgICAgIGJvb2wgc3RhY2tFbXB0eSgpCiAgICAgICAgewogICAgICAgICAgICBpZih0b3AgPT0gLTEpIHJldHVybiB0cnVlOwogICAgICAgIH0KIAogICAgICAgIHZvaWQgcHJpbnRTdGFjaygpCiAgICAgICAgewogICAgICAgICAgICBUIHMgPSB0b3ArMTsKICAgICAgICAgICAgd2hpbGUocy0tKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBwcmludGYoImFbJWRdID0gJWRcbiIscyxhW3NdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KfTsKIAppbnQgbWFpbigpCnsKICAgIE15U3RhY2s8aW50PiBzKDUpOwogICAgaW50IHQ7CiAKICAgIHdoaWxlKHRydWUpCiAgICB7CiAgICAgICAgc2NhbmYoIiVkIiwmdCk7CiAgICAgICAgcy5wdXNoKHQpOwogICAgICAgIGNvdXQ8PCJtaW4gPSAiPDxzLm1pbm0oKTw8ZW5kbDsKICAgICAgICBjb3V0PDwibWluID0gIjw8cy5taW5tbSgpPDxlbmRsOwogCiAgICAgICAgaWYodD09LTEpIGJyZWFrOwogCiAgICB9CiAKICAgIGNvdXQ8PCItLS0tLS0tLS0tIjw8ZW5kbDsKICAgIHMucHJpbnRTdGFjaygpOwp9