<p>Given a <strong>0-indexed</strong> integer array <code>nums</code> of size <code>n</code> containing all numbers from <code>1</code> to <code>n</code>, return <em>the number of increasing quadruplets</em>.</p>

<p>A quadruplet <code>(i, j, k, l)</code> is increasing if:</p>

<ul>
	<li><code>0 &lt;= i &lt; j &lt; k &lt; l &lt; n</code>, and</li>
	<li><code>nums[i] &lt; nums[k] &lt; nums[j] &lt; nums[l]</code>.</li>
</ul>

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

<pre>
<strong>Input:</strong> nums = [1,3,2,4,5]
<strong>Output:</strong> 2
<strong>Explanation:</strong> 
- When i = 0, j = 1, k = 2, and l = 3, nums[i] &lt; nums[k] &lt; nums[j] &lt; nums[l].
- When i = 0, j = 1, k = 2, and l = 4, nums[i] &lt; nums[k] &lt; nums[j] &lt; nums[l]. 
There are no other quadruplets, so we return 2.
</pre>

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

<pre>
<strong>Input:</strong> nums = [1,2,3,4]
<strong>Output:</strong> 0
<strong>Explanation:</strong> There exists only one quadruplet with i = 0, j = 1, k = 2, l = 3, but since nums[j] &lt; nums[k], we return 0.
</pre>

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

<ul>
	<li><code>4 &lt;= nums.length &lt;= 4000</code></li>
	<li><code>1 &lt;= nums[i] &lt;= nums.length</code></li>
	<li>All the integers of <code>nums</code> are <strong>unique</strong>. <code>nums</code> is a permutation.</li>
</ul>

class Solution:
    def countQuadruplets(self, nums: List[int]) -> int:
       ans = 0
       n = len(nums)
       cnt = [0] * n # cnt[j] 代表满足i < j < k, nums[i] < nums[k] < nums[j]的个数

       for l in range(0, n):
           x = 0
           for j in range(0, l):
               if nums[j] < nums[l]: # 当nums[j] < nums[l]时，配合cnt[j]满足的条件可知为合法四元组
                   ans += cnt[j]
                   x += 1
               else:
                   cnt[j] += x # 当nums[l] < nums[j]时，令i1 = i, j1 = j, k1 = l
                               # 此时cnt[j] = cnt[j1]，代表满足 nums[i1] < nums[k1] < nums[j1]的个数
                               # 由于nums[l] < nums[j] ==> nums[k1] < nums[j1]已经满足后半部分条件
                               # 而 x 统计了当前所有小于nums[l]即所有小于nums[k1]的个数
                               # 所以 x 代表所有nums[i1]的个数
                               # 故此时 cnt[j1] += x ==> cnt[j] += x
       
       return ans
        
17000