P10297 [CCC 2024 S3] Swipe

题目描述

Swipe 是一款新的手机游戏,最近大受欢迎。在 Swipe 游戏的每一个关卡中,您都会得到两个长度为 $N$ 的数列 $A$ 和 $B$。Swipe 游戏的每个关卡的目标是把数组 $A$ 变成数组 $B$。 现在有两种可以对 $A$ 进行的滑动操作。 - 向右滑动:选择一个区间 $[l, r]$,对任意 $l \leq i \leq r$ 令 $A_i = A_l$。 - 向左滑动:选择一个区间 $[l, r]$,对任意 $l \leq i \leq r$ 令 $A_i = A_r$。 例如,一开始 $A = [0, 1, 2, 3, 4, 5]$,如果我们对区间 $[2, 4]$ 做向右滑动的操作,序列变为 $[0, 1, 2, 2, 2, 5]$。如果我们对区间 $[3, 5]$ 做向左滑动的操作,序列变为 $[0, 1, 2, 5, 5, 5]$。注意序列从 $0$ 开始编号。 不幸的是,游戏存在一些问题,可能会包含无法通过的关卡。请问是否可以将数组 $A$ 转换为数组 $B$。如果可以,请给出任意一种将数组 $A$ 转换为数组 $B$ 的滑动操作方案。

输入格式

输入的第一行包含一个正整数 $N$ 表示两个数列的长度。 第二行包含 $N$ 个空格隔开的 $A$ 中的整数。 第三行包含 $N$ 个空格隔开的 $B$ 中的整数。

输出格式

如果存在一种操作方案可以把 $A$ 变为 $B$,在第一行输出 `YES`,否则输出 `NO`。 如果在第一行输出了 `YES`,则下一行包含一个非负整数 $K$($K \leq N$)表示滑动次数。 接下来 $K$ 行每行包含三个空格隔开的数 $D_j,l_j$ 和 $r_j$。$D_j$ 是 `R` 或者 `L` 表示第 $j$ 次操作是向右滑动还是向左滑动。 $l_j$ 和 $r_j$ 表示这次滑动操作的左端和右端,必须满足 $0 \leq l_j \leq r_j < N$。

说明/提示

**本题采用捆绑测试。** 对于所有数据,保证 $1 \leq N \leq 3 \times 10^5$,$1 \leq A_i, B_i \leq 3 \times 10^5$。 下面的表格显示了 $15$ 分的分配方案: | 分值 | $N$ 的范围 | $A_i$ 和 $B_i$ 的范围 | | :-: | :-: | :-: | | $2$ | $N = 2$ | $1 \leq A_i, B_i \leq 3$ | | $4$ | $1 \leq N \leq 8$ | $1 \leq A_i, B_i \leq 8$ | | $4$ | $1 \leq N \leq 500$ | $1 \leq A_i, B_i \leq 3000$ | | $5$ | $1 \leq N \leq 3 \times 10^5$ | $1 \leq A_i, B_i \leq 3 \times 10^5$ | 注意对于一个分值为 $M$ 的子任务,如果只答对了第一行的内容,你可以得到 $\left\lfloor\dfrac M2\right\rfloor$ 分。