#P14190. [ICPC 2024 Hangzhou R] Dividing Sequence

    ID: 14121 远端评测题 1000ms 1024MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>字符串动态规划 DP贪心2024ICPCLyndon 分解杭州

[ICPC 2024 Hangzhou R] Dividing Sequence

Description

Alice 收到了一串由她的邻居们构造的序列 AA。由于 Alice 不喜欢过长的序列,她决定将序列分成两个(可能为空)序列 BBCC,再还给她的邻居们。她分割的方式需要满足以下约束条件:

  • BBCC 都是 AA 的子序列,且 AA 的每一个元素都会被分配到 BBCC 中的恰好一个序列。
  • BB 在字典序上小于等于 CC

在这里,我们定义长度为 uu 的序列 P=p1,p2,,puP = p_1, p_2, \cdots, p_u 在字典序上小于长度为 vv 的序列 Q=q1,q2,,qvQ = q_1, q_2, \cdots, q_v,当且仅当满足下列条件之一:

  • u<vu < vPPQQ 的前缀。
  • 存在整数 1kmin(u,v)1 \le k \le \min(u, v),使得对于所有 1i<k1 \le i < kpi=qip_i = q_ipk<qkp_k < q_k

作为一位公平的女孩,Alice 希望分得公平,使得 CC 的字典序尽可能小。请你告诉 Alice,CC 能取得的字典序最小的情况。

Input Format

有多组测试数据。输入的第一行包含一个整数 TT1T1041\leq T\leq 10^4),表示测试数据组数。对于每组测试数据:

第一行包含一个整数 nn1n5×1031\leq n\leq 5 \times 10^3),表示序列 AA 的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \cdots, a_n1ai1051\leq a_i\leq 10^5),表示序列 AA 的第 ii 个元素。

保证所有测试数据中 nn 的总和不超过 10410^4

Output Format

对于每组测试数据,输出两行。第一行包含一个整数 mm,表示最优情况下 CC 的长度。第二行包含 mm 个用空格分隔的整数 c1,c2,,cmc_1, c_2, \cdots, c_m,表示最优情况下 CC 的序列。

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

Hint

由 ChatGPT 5 翻译