#ABC354F. 对 LIS 无用的元素

对 LIS 无用的元素

对 LIS 无用的元素

题目描述

给你一个长度为 NN 的整数序列 AA

对每个 t=1,2,,Nt = 1, 2, \dots, N,判断 AtA_t 是否被包含在 AA 的某个最长上升子序列中。

这里,当且仅当以下条件成立时,AtA_t 被包含在 AA 的某个最长上升子序列中:

LLAA 的最长上升子序列的长度。存在一个严格递增的整数序列 i=(i1,i2,,iL)i = (i_1, i_2, \dots, i_L)(i1<i2<<iLi_1 \lt i_2 \lt \dots \lt i_L),其中每个元素都在 11NN 之间(含端点),且满足以下所有条件:

  • Ai1<Ai2<<AiLA_{i_1} \lt A_{i_2} \lt \dots \lt A_{i_L}
  • 对某个 kk(1kL1 \le k \le L),有 ik=ti_k = t

本题有 TT 组测试用例,请分别求解。

什么是最长上升子序列?

序列 AA 的子序列,是指从 AA 中取出若干元素且不改变顺序而得到的序列。

序列 AA 的最长上升子序列,是 AA 的子序列中严格递增且长度最大的那一个。

输入格式

输入按以下格式从标准输入给出:

TT
case1\mathrm{case}_1
case2\mathrm{case}_2
\vdots
caseT\mathrm{case}_T

这里,casei\mathrm{case}_i 表示第 ii 组用例的输入。每组用例按以下格式给出:

NN
A1A_1 A2A_2 \cdots ANA_N

输出格式

按以下格式输出答案:

answer1\mathrm{answer}_1
answer2\mathrm{answer}_2
\vdots
answerT\mathrm{answer}_T

这里,answeri\mathrm{answer}_i 表示第 ii 组用例的输出。对每组用例,设满足「AtA_t 被包含在 AA 的某个最长上升子序列中」的下标 ttmm 个,按升序为 i1,i2,,imi_1, i_2, \dots, i_m。按以下格式输出:

mm
i1i_1 i2i_2 \cdots imi_m

样例

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

其中一个最长上升子序列是 (2,4,5)(2, 4, 5),长度为 33。另一个最长上升子序列是 (1,4,5)(1, 4, 5)。但是,不存在包含 A5A_5 的最长上升子序列。

因此输出 1,2,3,41, 2, 3, 4

2
6
2 5 3 4 3 4
5
10000 1000 100 1 10
5
1 3 4 5 6
2
4 5

数据范围

  • 1T2×1051 \le T \le 2 \times 10^5
  • 1N2×1051 \le N \le 2 \times 10^5
  • 1Ai1091 \le A_i \le 10^9
  • 所有测试用例的 NN 之和不超过 2×1052 \times 10^5
难度 提高+/省选
通过率
尝试 0
已通过 0
ID
3303
类型
传统题
Time Limit
2000ms
Memory Limit
1024MiB
上传者
标签