<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>

class Solution {
public:
    bool find132pattern(vector<int>& a) {
      vector<int> b = a;
      sort(b.begin(), b.end(), greater<>());
      stack<int> stk;
      int idx = 0;
      for (int i = 0; i < b.size(); i++) {
        stk.push(b[i]);
        while (stk.size() && stk.top() == a[idx]) {
          stk.pop();
          idx++;
        }
      }

      return stk.size();
    }
};


// 3 2 1 依次入栈，可以构造出若干个出栈序列 5
// 对于长度为3的序列（只含1 2 3），它是出栈序列当且仅当它！= 132
// n n-1 ... 3 2 1 依次入栈
// 长度为n的序列，栈序列《=》 没有132 pattern


//   4 2 ？？？是出栈序列吗？
//   依次入栈
// [4 2 

// On 单调栈的做法
73036