#5096. Useless for LIS

0

Useless for LIS

Useless for LIS

题目描述

你被给定一个长度为 NN 的整数序列 AA。 对于每个 t=1,2,…,Nt = 1, 2, \dots, N,判断 AtA_t 是否被包含在序列 AA 的某个最长严格递增子序列中。 这里,AtA_t 被包含在序列 AA 的某个最长严格递增子序列当且仅当下述条件成立:

设 LL 为序列 AA 的最长严格递增子序列的长度。存在一个严格递增的整数序列 $i = (i_1, i_2, \dots, i_L) \ (i_1 < i_2 < \dots < i_L)$,其中每个元素都在 11 到 NN 之间(包含端点),并且满足下列所有条件:

A_{i_1} < A_{i_2} < \dots < A_{i_L}。

对于某个 k (1≤k≤L)k \ (1 \leq k \leq L) 有 ik=ti_k = t。

给定 TT 个测试用例;请对每个测试用例求解。

什么是最长严格递增子序列?

序列 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 个测试用例的输出。对于每个测试用例,设存在 mm 个下标 tt 使得 AtA_t 被包含在序列 AA 的某个最长严格递增子序列,这些下标按升序为 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
6
2 5 3 4 3 4
5
10000 1000 100 1 10
5
1 3 4 5 6
2
4 5

提示

1≤T≤2×1051 \leq T \leq 2 \times 10^5 1≤N≤2×1051 \leq N \leq 2 \times 10^5 1≤Ai≤1091 \leq A_i \leq 10^9 所有测试用例中 NN 的总和至多为 2×1052 \times 10^5。一个最长严格递增子序列是 (2,4,5)(2, 4, 5),长度为 33。另一个最长严格递增子序列是 (1,4,5)(1, 4, 5)。然而,没有任何最长严格递增子序列包含 A5A_5。 因此,输出 1,2,3,41, 2, 3, 4。

标签: AtCoder|abc354F

来源

AtCoder|abc354F