#YC225. 序列动态操作数组

序列动态操作数组

序列动态操作数组

题目描述

给定一个初始为空的序列 AA,需要处理 QQ 个按照给定顺序输入的查询。查询分为两种类型:

查询类型

  1. 追加操作
    1 x:将整数 xx 添加到序列 AA 的末尾

  2. 查找操作
    2 k:找出距离序列末尾第 kk 个元素的值(即倒数第 kk 个元素)


  • 1Q1001 \leq Q \leq 100
  • 第一类查询操作中,新增加的整数XX 满足 1X1091 \leq X \leq 10^9
  • 第二类操作中,保证KK不超过当前AA的长度.

输入格式

所有的数据输入都按以下标准格式:

QQ

query1\mathrm{query}_1

query2\mathrm{query}_2

\vdots

queryQ\mathrm{query}_Q

每个queryquery查询为下列两种情况之一:

11 xx

22 kk

输出格式

对于每个第二类查询操作,输出数组当中倒数第KK个数的值

样例

5
1 20
1 30
2 1
1 40
2 3

30
20

序列操作示例1详解

初始状态

序列 AA 初始为空:

A=[ ]A = [\ ]

操作流程与结果

操作序号 操作类型 具体操作 序列状态变化 查询结果说明
1 1 20 追加元素20 A=[20]A = [20] ——
2 1 30 追加元素30 A=[20,30]A = [20, 30]
3 2 1 查询倒数第1个元素 当前序列 [20,30][20,30] 30​(末尾第1个元素是30)
4 1 40 追加元素40 A=[20,30,40]A = [20,30,40] ——
5 2 3 查询倒数第3个元素 当前序列 [20,30,40][20,30,40] 20​(末尾第3个元素即首元素20)

关键说明

  1. 操作类型

    • 1 x 表示追加操作,元素添加到序列末尾
    • 2 k 表示反向查询操作,kk 从末尾开始计数
  2. 反向索引规则

    • A=[a1,a2,...,an]A = [a_1, a_2, ..., a_n] 时:
      • 倒数第1个元素是 ana_n
      • 倒数第k个元素是 ank+1a_{n-k+1}
  3. 本示例核心逻辑

    • 第五次查询时,A=[20,30,40]A = [20,30,40],查询倒数第3个元素即 A[33+1]=A[1]=20A[3-3+1] = A[1] = 20