CF1364B.Most socially-distanced subsequence

普及-

通过率:0%

时间限制:1.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Given a permutation pp of length nn, find its subsequence s1s_1, s2s_2, …\ldots, sks_k of length at least 22 such that:

  • ∣s1−s2∣+∣s2−s3∣+…+∣sk−1−sk∣|s_1-s_2|+|s_2-s_3|+\ldots+|s_{k-1}-s_k| is as big as possible over all subsequences of pp with length at least 22.
  • Among all such subsequences, choose the one whose length, kk, is as small as possible.

If multiple subsequences satisfy these conditions, you are allowed to find any of them.

A sequence aa is a subsequence of an array bb if aa can be obtained from bb by deleting some (possibly, zero or all) elements.

A permutation of length nn is an array of length nn in which every element from 11 to nn occurs exactly once.

给定一个长度为 nn 的排列 pp,请找出其一个长度至少为 22 的子序列 s1s_1, s2s_2, …\ldots, sks_k,使得:

  • 在所有长度至少为 22 的 pp 的子序列中,和式 ∣s1−s2∣+∣s2−s3∣+…+∣sk−1−sk∣|s_1-s_2|+|s_2-s_3|+\ldots+|s_{k-1}-s_k| 尽可能大;
  • 在所有满足上述最大和的子序列中,选择长度 kk 尽可能小的那个。

若存在多个满足条件的子序列,输出其中任意一个即可。

序列 aa 是数组 bb 的子序列,当且仅当 aa 可通过从 bb 中删除若干(可能为零个或全部)元素得到。

长度为 nn 的排列是指一个长度为 nn 的数组,其中 11 到 nn 的每个整数恰好出现一次。

输入格式

The first line contains an integer tt (1≤t≤2⋅1041 \le t \le 2 \cdot 10^4) — the number of test cases. The description of the test cases follows.

The first line of each test case contains an integer nn (2≤n≤1052 \le n \le 10^5) — the length of the permutation pp.

The second line of each test case contains nn integers p1p_1, p2p_2, …\ldots, pnp_{n} (1≤pi≤n1 \le p_i \le n, pip_i are distinct) — the elements of the permutation pp.

The sum of nn across the test cases doesn't exceed 10510^5.

第一行包含一个整数 tt(1≤t≤2⋅1041 \le t \le 2 \cdot 10^4)——测试用例的数量。随后是各测试用例的描述。

每个测试用例的第一行包含一个整数 nn(2≤n≤1052 \le n \le 10^5)——排列 pp 的长度。

每个测试用例的第二行包含 nn 个整数 p1p_1, p2p_2, …\ldots, pnp_{n}(1≤pi≤n1 \le p_i \le n,且 pip_i 互不相同)——排列 pp 的元素。

所有测试用例的 nn 值之和不超过 10510^5。

输出格式

For each test case, the first line should contain the length of the found subsequence, kk. The second line should contain s1s_1, s2s_2, …\ldots, sks_k — its elements.

If multiple subsequences satisfy these conditions, you are allowed to find any of them.

对于每个测试用例,第一行应输出所找到子序列的长度 kk;第二行应输出该子序列的元素 s1s_1, s2s_2, …\ldots, sks_k。

若存在多个满足条件的子序列,任选其一输出即可。

输入输出样例

  • 输入#1

    2
    3
    3 2 1
    4
    1 3 4 2

    输出#1

    2
    3 1 
    3
    1 4 2

说明/提示

In the first test case, there are 44 subsequences of length at least 22:

  • [3,2][3,2] which gives us ∣3−2∣=1|3-2|=1.
  • [3,1][3,1] which gives us ∣3−1∣=2|3-1|=2.
  • [2,1][2,1] which gives us ∣2−1∣=1|2-1|=1.
  • [3,2,1][3,2,1] which gives us ∣3−2∣+∣2−1∣=2|3-2|+|2-1|=2.

So the answer is either [3,1][3,1] or [3,2,1][3,2,1]. Since we want the subsequence to be as short as possible, the answer is [3,1][3,1].

在第一个测试用例中,长度至少为 22 的子序列共有 44 个:

  • [3,2][3,2],其值为 ∣3−2∣=1|3-2|=1。
  • [3,1][3,1],其值为 ∣3−1∣=2|3-1|=2。
  • [2,1][2,1],其值为 ∣2−1∣=1|2-1|=1。
  • [3,2,1][3,2,1],其值为 ∣3−2∣+∣2−1∣=2|3-2|+|2-1|=2。

因此答案为 [3,1][3,1] 或 [3,2,1][3,2,1]。由于我们要求子序列尽可能短,故答案为 [3,1][3,1]。

输入解题思路,AI测评打分。不知道怎么写?

首页