CF1685E The Ultimate LIS Problem

题目描述

事实证明,这正好是我在某个编程竞赛中出现的第 $100$ 道题。所以它必须很特别!还有什么比另一道关于 LIS 的题更特别的呢…… 给定一个由 $1$ 到 $2n+1$ 组成的排列 $p_1, p_2, \ldots, p_{2n+1}$。你需要处理 $q$ 次操作,每次操作将交换 $p_{u_i}$ 和 $p_{v_i}$。 每次操作后,找出 $p$ 的任意一个循环移位,使得该移位后的排列的最长严格递增子序列(LIS)长度不超过 $n$,或者判断不存在这样的移位。(具体输出格式见输出格式部分) 这里 $LIS(a)$ 表示序列 $a$ 的最长严格递增子序列的长度。 本题不允许 Hack。不要问为什么。

输入格式

输入的第一行包含两个整数 $n, q$($2 \le n \le 10^5$,$1 \le q \le 10^5$)。 第二行包含 $2n+1$ 个整数 $p_1, p_2, \ldots, p_{2n+1}$($1 \le p_i \le 2n+1$,所有 $p_i$ 互不相同),表示排列 $p$ 的元素。 接下来的 $q$ 行,每行包含两个整数 $u_i, v_i$($1 \le u_i, v_i \le 2n+1$,$u_i \neq v_i$),表示第 $i$ 次操作需要交换 $p_{u_i}$ 和 $p_{v_i}$。

输出格式

每次操作后,输出任意一个 $k$($0 \le k \le 2n$),使得排列 $(p_{k+1}, p_{k+2}, \ldots, p_{2n+1}, p_1, \ldots, p_k)$ 的最长递增子序列长度不超过 $n$;如果不存在这样的 $k$,输出 $-1$。

说明/提示

第一次操作后,排列变为 $(5, 2, 3, 4, 1)$。可以证明其所有循环移位的 LIS 都不少于 $3$。 第二次操作后,排列变为 $(1, 2, 3, 4, 5)$。可以证明其所有循环移位的 LIS 都不少于 $3$。 第三次操作后,排列变为 $(1, 2, 3, 5, 4)$。它循环移位 $2$ 位后为 $(3, 5, 4, 1, 2)$,其 LIS 为 $2$。 第四次操作后,排列变为 $(1, 2, 3, 4, 5)$。可以证明其所有循环移位的 LIS 都不少于 $3$。 第五次操作后,排列变为 $(4, 2, 3, 1, 5)$。它循环移位 $4$ 位后为 $(5, 4, 2, 3, 1)$,其 LIS 为 $2$。 第六次操作后,排列变为 $(4, 5, 3, 1, 2)$。它循环移位 $0$ 位后为 $(4, 5, 3, 1, 2)$,其 LIS 为 $2$。 由 ChatGPT 4.1 翻译