#P9677. [ICPC 2022 Jinan R] Stack Sort

[ICPC 2022 Jinan R] Stack Sort

题目描述

给定一个包含 nn 个数字的排列 $a_1, a_2, \dots, a_n (1\leq a_i\leq n, a_i \neq a_j\text{ 当 }i \neq j)$。

你需要使用 mm 个栈对这些数字进行排序。具体来说,你需要完成以下任务:

最初,所有栈都是空的。你需要按照 a1,a2,…,ana_1,a_2,\ldots, a_n 的顺序,将每个数字 aia_i 压入 mm 个栈中的一个栈的顶部。在将所有数字压入栈中之后,你需要以一种巧妙的顺序从栈中弹出所有元素,使得你弹出的第一个数字是 11,第二个数字是 22,依此类推。如果你从一个栈 SS 中弹出一个元素,那么在 SS 变空之前,你不能从其他栈中弹出任何元素。

完成任务所需的最小 mm 是多少?

输入格式

第一行包含一个整数 T (1≤T≤105)T~(1\le T \le 10^5),表示测试用例的数量。

对于每个测试用例,第一行包含一个正整数 n (1≤n≤5×105)n~(1\le n \le 5 \times 10^5)。下一行包含 nn 个整数 a1,…,an (1≤ai≤n)a_1,\ldots, a_n~(1 \le a_i\le n),表示排列。保证 a1,…,ana_1,\ldots, a_n 形成一个排列,即 ai≠aja_i \neq a_j 对于 i≠ji \neq j。

保证所有测试用例中 nn 的总和不超过 5×1055\times 10^5。

输出格式

对于每个测试用例,输出一个整数,表示完成任务所需的最小 mm。

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

3
1
4

提示

题面翻译由 ChatGPT-4o 提供。