派生自 Algorithm/baseDetector

Scheaven
2021-08-11 8e10c57c7e053d8789747cf1e2c5fa78f2f65cc7
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
//
// Created by Scheaven on 2020/6/8.
//
 
#ifndef _STACK_UTIL_H
#define _STACK_UTIL_H
 
#include <algorithm>
#include <memory.h>
#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <stdlib.h>
#include <vector>
#include <stack>
#include <cstdio>
 
using namespace std;
 
 
template <typename T>
class MaxStack
{
private:
    stack<T> max_stack;
    stack<T> _data;
 
public:
    MaxStack(){};
    ~MaxStack(){};
 
 
    void push(T ele)
    {
        _data.push(ele);
        if(max_stack.empty() || ele>=max_stack.top())
        {
            max_stack.push(ele);
        }
    };
 
    void pop()
    {
        T tem = _data.top();
        _data.pop();
        if(tem==max_stack.top())
        {
            max_stack.pop();
        }
    };
 
    T top()
    {
        return _data.top();
 
    };
 
    bool isEmpty()
    {
        return _data.empty();
    };
 
    T maxItem()
    {
        return max_stack.top();
    };
 
    int size()
    {
        return _data.size();
    };
};
 
 
template <typename T>
class MinStack
{
private:
    stack<T> min_stack;
    stack<T> _data;
 
public:
    MinStack(){};
    ~MinStack(){};
 
    void push(T ele)
    {
        _data.push(ele);
        if(min_stack.empty() || ele<=min_stack.top())
        {
            min_stack.push(ele);
        }
    };
 
    void pop(){
        T tem = _data.top();
        _data.pop();
        if(tem==min_stack.top())
        {
            min_stack.pop();
        }
    };
 
    T top()
    {
        return _data.top();
 
    };
 
    bool isEmpty()
    {
        return _data.empty();
    };
 
    T minItem()
    {
        return min_stack.top();
    };
 
    int size()
    {
        return _data.size();
    };
};
 
#endif //INC_05_MAX_STACK_QUEUE_STACK_UTIL_H