美团 · 模拟 · 算法编程题
美团 模拟 n ≤ 2000 时限 1 秒 / 256 MB

题目描述

小团是一个莫得感情的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输出一行,每行仅包含一个正整数,表示针对某一个询问的答案。

样例共 2 组

样例 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

算法解析依据充分

考点:模拟

数据规模 n ≤ 2000 | 限制 1 秒 / 256MB | 标准输入输出

题目画像

  • 数据规模:n ≤ 2000,m ≤ 2000
  • 复杂度门槛:只允许 O(n log n) 及更优,朴素 O(n²) 会超时。
  • 源站时限:1 秒(牛客口径,非本题专属门槛)

解题思路

推荐方向:模拟

本题切入点

区间粘贴属于数组覆盖写,用数组直接模拟每次粘贴与查询即可,n、m ≤ 2000 规模下完全够用。

不涉及复杂算法,把题目描述的流程原样翻译成代码逐步执行即可。

思路框架(模拟 通法 · 非本题专属)

  1. 用变量记录题目要求的「状态」(当前值、剩余数量、当前位置等)。
  2. 按题面给出的顺序,把每一步操作写成一段代码,逐条执行。
  3. 每一步执行后更新状态,并在题目要求的位置输出或累计答案。
  4. 注意循环的边界:执行多少次、何时终止、是否能终止。

实现要点:结构上通常是一个外层循环包住若干 if/else 分支;只要状态定义清楚,正确率很高。

复杂度:时间 O(操作次数) | 空间 O(状态数)

该范式的通法易错点

  • 终止条件写错导致死循环或漏做最后一次操作。
  • 状态更新顺序颠倒(先改了下标又用旧下标)。
  • 题目里「最多 / 恰好 / 至少」的语义差别没区分。

对照本题

  • 数据规模 n ≤ 2000,只允许 O(n log n) 及更优,朴素 O(n²) 会超时。

题目给出的提示

  • 不会出现粘贴后k个元素超出B序列原有长度的情况)

样例

样例 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校招笔试-编程题(算法编程题)。

‹ 上一题 全部编程题 下一题 ›
编程算法题为只读内容:无需作答,直接看题与解析 · 本站不提供在线判题 · 解析由校招宝本地引擎整理,非官方题解