#1523. tuple模板题

tuple模板题

题目描述

现有一个存储元组(Tuple) 的容器(元组元素为整数,长度固定为3),支持以下操作:插入元组、查询元组、按指定位置元素排序、截取子容器和统计元素出现次数。元组不可修改(若需修改,需先删除原元组再插入新元组)。具体规则如下:

  1. 插入操作:在容器末尾插入一个3元组。
  2. 查询操作:获取指定索引的元组。
  3. 排序操作:按元组中指定位置(1、2、3,对应元组的第1、2、3个元素)的元素升序排序;若该位置元素相同,按元组整体升序(依次比较后续元素)。
  4. 截取操作:截取容器中从索引lr(包含lr)的子容器(原容器不变),并输出子容器中的元组。若lr不合法,输出空。
  5. 统计操作:统计指定整数在所有元组的所有位置中出现的总次数。

操作完成后,需输出最终容器中所有元组(按存储顺序)及元组总个数。

输入格式

  • 第一行输入一个整数q1 ≤ q ≤ 1000000),表示操作的总次数。
  • 接下来q行,每行表示一次操作,格式如下:
    • 插入操作1 a b c(插入元组(a, b, c))。
    • 查询操作2 idx(查询索引为idx的元组,索引从0开始)。
    • 排序操作3 pos(按元组中第pos个元素升序排序,pos为1、2、3)。
    • 截取操作4 l r(截取索引lr的子容器)。
    • 统计操作5 x(统计整数x在所有元组中出现的总次数)。

输出格式

  • 对于每次查询操作(操作2),输出元组的三个元素,用空格分隔;
  • 对于每次截取操作(操作4):
    • lr合法(0 ≤ l ≤ r < 容器长度),按顺序输出子容器中的元组,每个元组占一行(元素用空格分隔);
    • 若不合法,不输出任何内容。
  • 对于每次统计操作(操作5):输出一行整数,表示指定整数的总出现次数。
  • 所有操作完成后:
    • 第一行输出元组总个数;
    • 接下来每行输出一个元组(元素用空格分隔),按存储顺序;若容器为空,仅输出0。

样例 1 输入

7
1 3 1 2
1 2 2 2
1 1 3 2
3 3
2 0
5 2
4 0 1

样例 1 输出

1 3 2
5
1 3 2
2 2 2
3
1 3 2
2 2 2
3 1 2

样例说明

  1. 插入操作:依次插入(3,1,2)(2,2,2)(1,3,2),容器初始为[(3,1,2), (2,2,2), (1,3,2)]
  2. 排序操作:按第3个元素(元组的第3个元素)升序排序。三个元组的第3个元素均为2,继续按整体升序排序,结果为[(2,2,2), (1,3,2), (3,1,2)](比较规则:先比较第1元素,2 < 1不成立,1 < 3成立,故(1,3,2)(3,1,2)前;再比较(2,2,2)(1,3,2),1 < 2,故(1,3,2)应在(2,2,2)前?此处修正:实际排序后应为[(1,3,2), (2,2,2), (3,1,2)],因第1元素1 < 2 < 3)。
  3. 查询操作:索引0的元组为(1,3,2)?(根据正确排序逻辑修正后)输出1 3 2(原样例输出为演示,此处以逻辑为准)。
  4. 统计操作:整数2在元组中出现的位置:(3,1,2)的第3位、(2,2,2)的第1、2、3位、(1,3,2)的第3位,共5次,输出5。
  5. 截取操作:截取索引0到1的子容器,输出这两个元组。
  6. 最终输出:总个数3,按顺序输出所有元组。

测试点约束

  • 操作次数 q ≤ 1000000
  • 元组元素及统计的整数x的取值范围为int(-2^31 ~ 2^31-1)。
  • 排序操作的pos仅为1、2、3。
  • 保证pos合法
  • 3、4操作最多各出现一次

提示

  • 元组特性:元组不可修改,若需变更元素,需通过“删除+插入”实现(本题未涉及删除,可简化为直接维护可修改的列表模拟元组)。
  • 排序逻辑:按指定位置元素为第一关键字,元组整体为第二关键字升序。
  • 截取边界:需严格检查lr的合法性(l ≤ r且均在有效索引范围内)。