#P14105. [ZJCPC 2017] Heap Partition

[ZJCPC 2017] Heap Partition

Description

一个序列 S={s1,s2,,sn}S = \{s_1, s_2, \dots, s_n\} 被称为 heapable\textit{heapable},如果存在一棵有 nn 个节点的二叉树 TT,使得每个节点恰好用序列 SS 中的一个元素进行标记,并且对于每个非根节点 sis_i 及其父节点 sjs_j,都满足 sjsis_j \le s_ij<ij < i。序列 SS 中的每个元素只能用于标记树 TT 的某个节点一次。

Chiaki 有一个序列 a1,a2,,ana_1, a_2, \dots, a_n,她想要将其分解为最少数目的可堆子序列(heapable subsequences)。

注意,一个子序列是指可以通过删除一些元素(不改变剩余元素的相对顺序)从原序列得到的序列。

Input Format

本题有多组测试数据。输入的第一行为整数 TT,表示测试用例数。对于每一组测试数据:

第一行包含一个整数 nn1n1051 \le n \le 10^5),表示序列的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ain1 \le a_i \le n)。

保证所有测试用例中 nn 的总和不超过 2×1062 \times 10^6

Output Format

对于每组测试数据,第一行输出一个整数 mm,表示分解得到的最少可堆子序列的个数。接下来的 mm 行,每行先输出一个整数 CiC_i,表示该子序列的长度。然后在同一行输出 CiC_i 个递增排列的整数 Pi1,Pi2,,PiCiP_{i1}, P_{i2}, \dots, P_{iC_i},表示该子序列中各元素在原序列中的索引。

4
4
1 2 3 4
4
2 4 3 1
4
1 1 1 1
5
3 2 1 4 1
1
4 1 2 3 4
2
3 1 2 3
1 4
1
4 1 2 3 4
3
2 1 4
1 2
2 3 5

Hint

由 ChatGPT 5 翻译