QOJ.ac

QOJ

Time Limit: 4.0 s Memory Limit: 256 MB Total points: 100 Hackable ✓

#16108. Home Workout Playlist

Statistics

当无法出门或与好友见面时,生活会显得枯燥乏味。幸运的是,你最喜欢的乐队今年一直在发布新歌,例如《Ussewa》、《Wan Koei Tuen》和《Thought Crime》。因此,你决定在家中一边播放播放列表一边锻炼!

你有一个包含 $N$ 首歌的播放列表,编号从 $1$ 到 $N$,代表歌曲的播放顺序。每首歌 $i$ 都有一个“嗨度值”(hypeness value)$A_i$。

在锻炼时,你只想听符合某种兴奋度上升模式的歌曲。你可以选择跳过一些歌曲,并保持剩余歌曲的原始顺序。

形式化地,令 $S = [S_1, S_2, \dots, S_k]$ 为 $[1, 2, \dots, N]$ 的一个子序列,表示未被跳过的歌曲的下标。你的任务是找到最长的子序列 $S$,使得:

  • 嗨度严格递增:对于所有 $i \ge 2$,满足 $A_{S_i} > A_{S_{i-1}}$。
  • 嗨度的增量也严格递增:对于所有 $i \ge 3$,满足 $A_{S_i} - A_{S_{i-1}} > A_{S_{i-1}} - A_{S_{i-2}}$。

换句话说,嗨度值本身及其相邻项之间的差值都必须构成严格递增序列。请找出满足条件的子序列 $S$ 的最大长度。

输入格式

第一行包含一个整数 $N$ ($1 \le N \le 5 \cdot 10^4$),表示播放列表中的歌曲数量。 第二行包含 $N$ 个整数 $A_1, A_2, \dots, A_N$ ($1 \le A_i \le 10^5$),表示歌曲的嗨度值。

输出格式

第一行输出一个整数 $k$,表示未被跳过的歌曲数量。 第二行输出 $k$ 个整数,表示未被跳过的歌曲的下标,按升序排列。 如果存在多个合法的未跳过歌曲列表,你可以输出其中任意一个。

样例

输入 1

5
2 1 3 4 6

输出 1

3
3 4 5

说明 1

其他合法的未跳过歌曲列表包括 $[1, 3, 5]$(对应的嗨度值为 $[2, 3, 6]$)和 $[2, 3, 5]$(对应的嗨度值为 $[1, 3, 6]$)。你可以输出其中任意一个。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.