小团是一个莫得感情的CtrlCV大师,他有一个下标从1开始的序列A和一个初始全部为-1序列B,两个序列的长度都是n。他会进行若干次操作,每一次操作,他都会选择A序列中一段连续区间,将其粘贴到B序列中的某一个连续的位置,在这个过程中他也会查询B序列中某一个位置上的值。 我们用如下的方式表示他的粘贴操作和查询操作: 粘贴操作:1 k x y,表示把A序列中从下标x位置开始的连续k个元素粘贴到B序列中从下标y开始的连续k个位置上。原始序列中的元素被覆盖。(数据保证不会出现粘贴后k个元素超出B序列原有长度的情况) 查询操作:2 x,表示询问B序列下标x处的值是多少。
输入第一行包含一个正整数n,表示序列A和序列B的长度。(1<=n<=2000) 输入第二行包含n个正整数,表示序列A中的n个元素,第i个数字表示下标为i的位置上的元素,每一个元素保证在10^9以内。 输入第三行是一个操作数m,表示进行的操作数量。(1<=m<=2000) 接下来m行,每行第一个数字为1或2,具体操作细节详见题面。
对于每一个操作2输出一行,每行仅包含一个正整数,表示针对某一个询问的答案。
5 1 2 3 4 5 5 2 1 2 5 1 2 3 4 2 3 2 5
-1 -1 -1 4
5 1 2 3 4 5 9 1 2 3 4 2 3 2 5 1 2 2 3 2 1 2 2 2 3 2 4 2 5
-1 4 -1 -1 2 3 4
考点:模拟
数据规模 n ≤ 2000 | 限制 1 秒 / 256MB | 标准输入输出
推荐方向:模拟
本题切入点
区间粘贴属于数组覆盖写,用数组直接模拟每次粘贴与查询即可,n、m ≤ 2000 规模下完全够用。
不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。
思路框架(模拟 通法 · 非本题专属)
实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。
复杂度:时间 O(操作次数) | 空间 O(状态数)
该范式的通法易错点
对照本题
样例 1
5 / 1 2 3 4 5 / 5 / 2 1 / 2 5 / 1 2 3 4 / 2 3 / 2 5-1 / -1 / -1 / 4样例 2
5 / 1 2 3 4 5 / 9 / 1 2 3 4 / 2 3 / 2 5 / 1 2 2 3 / 2 1 / 2 2 / 2 3 / 2 4 / 2 5-1 / 4 / -1 / -1 / 2 / 3 / 4解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:美团2023校招笔试-编程题(算法编程题)。