AT_arc125_c [ARC125C] LIS to Original Sequence 题解

写个暴力,造几组小数据,观察规律发现,答案总是形如 $a_1(b_1)a_2(b_2)a_3(b_3)\dots a_{k-1}(b_{k-1})+\{c\}$

(其中 $+$ 表示序列拼接,$b_i$ 表示小于 $a_i$ 且之前没出现过的最小数,$c$ 为之前没出现过的数降序排序的结果)

$a_1(b_1)a_2(b_2)a_3(b_3)\dots a_{k-1}(b_{k-1})$ 中不存在长度 $>k-1$ 的上升子序列,可以保证 $\{a_k\}$ 是答案的 LIS。

#include <cstdio>
int n, k;
bool b[200050];
int main()
{
    scanf("%d%d", &n, &k);
    for (int i = 1, x, p = 1; i < k; ++i)
    {
        scanf("%d", &x);
        printf("%d ", x);
        b[x] = 1;
        while (b[p])
            ++p;
        if (p < x)
            printf("%d ", p), b[p] = 1;
    }
    for (int i = n; i; --i)
        if (!b[i])
            printf("%d ", i);
    return 0;
}
posted @ 2023-07-24 21:02  Jijidawang  阅读(10)  评论(0)    收藏  举报  来源