CF292E Copying Data

题目描述

我们经常需要复制大量的信息。这种操作可能会占用大量的计算机资源。因此,在本题中,请你思考一种能快速地将一个数列的一部分复制到另一个数列的方法。 更正式地说,给定两个长度为 $n$ 的整数数组 $a_{1},a_{2},...,a_{n}$ 和 $b_{1},b_{2},...,b_{n}$。同时还有 $m$ 个两种类型的操作: 1. 从数组 $a$ 的第 $x$ 个位置起,长度为 $k$ 的连续子段,快速复制到数组 $b$ 的第 $y$ 个位置起的连续子段,即对于所有整数 $q$ 满足 $0 \le q < k$,执行 $b_{y+q}=a_{x+q}$。保证操作合法——两个子段不会越界。 2. 查询数组 $b$ 的第 $x$ 个位置的值,即输出 $b_{x}$。 对于每个第二种类型的操作,输出数组 $b$ 中对应元素的值。

输入格式

第一行包含两个用空格隔开的整数 $n$ 和 $m$ $(1 \le n, m \le 10^{5})$——数组元素个数以及操作个数。 第二行包含 $n$ 个整数,表示数组 $a$ 的元素 $a_{1},a_{2},...,a_{n}$ $(|a_{i}| \le 10^{9})$。 第三行包含 $n$ 个整数,表示数组 $b$ 的元素 $b_{1},b_{2},...,b_{n}$ $(|b_{i}| \le 10^{9})$。 接下来 $m$ 行,每行为一次操作描述。第 $i$ 行首先是一个整数 $t_{i}$,表示操作类型 $(1 \le t_{i} \le 2)$。若 $t_{i}=1$,则表示复制操作,随后有三个整数 $x_{i},y_{i},k_{i}$ $(1 \le x_{i},y_{i},k_{i} \le n)$,分别表示复制的起始位置、目标起始位置和复制长度。若 $t_{i}=2$,则表示查询操作,随后一个整数 $x_{i}$ $(1 \le x_{i} \le n)$,表示在数组 $b$ 查询的位置。 所有数之间用单个空格隔开。保证所有操作均合法,复制范围不会越界。

输出格式

对于每个第二种类型的操作,输出对应的 $b$ 元素值,占一行。

说明/提示

由 ChatGPT 5 翻译