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 翻译