<p>Given an array of <code>n</code> integers <code>nums</code>, a <strong>132 pattern</strong> is a subsequence of three integers <code>nums[i]</code>, <code>nums[j]</code> and <code>nums[k]</code> such that <code>i &lt; j &lt; k</code> and <code>nums[i] &lt; nums[k] &lt; nums[j]</code>.</p>

<p>Return <code>true</code><em> if there is a <strong>132 pattern</strong> in </em><code>nums</code><em>, otherwise, return </em><code>false</code><em>.</em></p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [1,2,3,4]
<strong>Output:</strong> false
<strong>Explanation:</strong> There is no 132 pattern in the sequence.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [3,1,4,2]
<strong>Output:</strong> true
<strong>Explanation:</strong> There is a 132 pattern in the sequence: [1, 4, 2].
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> nums = [-1,3,2,0]
<strong>Output:</strong> true
<strong>Explanation:</strong> There are three 132 patterns in the sequence: [-1, 3, 2], [-1, 3, 0] and [-1, 2, 0].
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>n == nums.length</code></li>
	<li><code>1 &lt;= n &lt;= 2 * 10<sup>5</sup></code></li>
	<li><code>-10<sup>9</sup> &lt;= nums[i] &lt;= 10<sup>9</sup></code></li>
</ul>

#define max_stack_size 200000
 // ANTHONY CHAVEZ AYME
struct NodeBT {
    int data;
    NodeBT *next = nullptr;
};

class mystack {
    NodeBT* lista[max_stack_size];
    int top = -1;

public:
    mystack() {}

    bool isempty() {
        return top == -1;
    }

    bool isfull() {
        return top == max_stack_size - 1;
    }

    NodeBT* get_top() {
        if (top != -1) {
            return lista[top];
        } else {
            return nullptr;
        }
    }

    void push(int x) {
        NodeBT* new_node = new NodeBT;
        new_node->data = x;
        if (top != max_stack_size - 1) {
            top++;
        }
        lista[top] = new_node;
    }

    NodeBT* pop() {
        if (top != -1) {
            NodeBT* popped_node = lista[top];
            top--;
            return popped_node;
        } else {
            return nullptr;
        }
    }
};

class Solution {
public:
    bool find132pattern(vector<int>& nums) {
        if (nums.size() < 3) return false;

        mystack stk;
        int second = INT_MIN;

        for (int i = nums.size() - 1; i >= 0; --i) {
            if (nums[i] < second) {
                return true;
            }

            while (!stk.isempty() && stk.get_top()->data < nums[i]) {
                second = stk.pop()->data;
            }

            stk.push(nums[i]);
        }

        return false;
    }
};
79358