tuple模板题
You cannot submit for this problem because the contest is ended. You can click "Open in Problem Set" to view this problem in normal mode.
题目描述
现有一个存储元组(Tuple) 的容器(元组元素为整数,长度固定为3),支持以下操作:插入元组、查询元组、按指定位置元素排序、截取子容器和统计元素出现次数。元组不可修改(若需修改,需先删除原元组再插入新元组)。具体规则如下:
- 插入操作:在容器末尾插入一个3元组。
- 查询操作:获取指定索引的元组。
- 排序操作:按元组中指定位置(1、2、3,对应元组的第1、2、3个元素)的元素升序排序;若该位置元素相同,按元组整体升序(依次比较后续元素)。
- 截取操作:截取容器中从索引
l
到r
(包含l
和r
)的子容器(原容器不变),并输出子容器中的元组。若l
或r
不合法,输出空。 - 统计操作:统计指定整数在所有元组的所有位置中出现的总次数。
操作完成后,需输出最终容器中所有元组(按存储顺序)及元组总个数。
输入格式
- 第一行输入一个整数
q
(1 ≤ q ≤ 1000000
),表示操作的总次数。 - 接下来
q
行,每行表示一次操作,格式如下:- 插入操作:
1 a b c
(插入元组(a, b, c)
)。 - 查询操作:
2 idx
(查询索引为idx
的元组,索引从0开始)。 - 排序操作:
3 pos
(按元组中第pos
个元素升序排序,pos
为1、2、3)。 - 截取操作:
4 l r
(截取索引l
到r
的子容器)。 - 统计操作:
5 x
(统计整数x
在所有元组中出现的总次数)。
- 插入操作:
输出格式
- 对于每次查询操作(操作2),输出元组的三个元素,用空格分隔;
- 对于每次截取操作(操作4):
- 若
l
和r
合法(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
样例说明
- 插入操作:依次插入
(3,1,2)
、(2,2,2)
、(1,3,2)
,容器初始为[(3,1,2), (2,2,2), (1,3,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)。 - 查询操作:索引0的元组为
(1,3,2)
?(根据正确排序逻辑修正后)输出1 3 2
(原样例输出为演示,此处以逻辑为准)。 - 统计操作:整数2在元组中出现的位置:
(3,1,2)
的第3位、(2,2,2)
的第1、2、3位、(1,3,2)
的第3位,共5次,输出5。 - 截取操作:截取索引0到1的子容器,输出这两个元组。
- 最终输出:总个数3,按顺序输出所有元组。
测试点约束
- 操作次数
q ≤ 1000000
。 - 元组元素及统计的整数
x
的取值范围为int
(-2^31 ~ 2^31-1)。 - 排序操作的
pos
仅为1、2、3。 - 保证
pos
合法 - 3、4操作最多各出现一次
提示
- 元组特性:元组不可修改,若需变更元素,需通过“删除+插入”实现(本题未涉及删除,可简化为直接维护可修改的列表模拟元组)。
- 排序逻辑:按指定位置元素为第一关键字,元组整体为第二关键字升序。
- 截取边界:需严格检查
l
和r
的合法性(l ≤ r
且均在有效索引范围内)。
竞赛3班7.26日习题课
- Status
- Done
- Rule
- IOI
- Problem
- 13
- Start at
- 2025-7-26 14:00
- End at
- 2025-7-26 20:00
- Duration
- 6 hour(s)
- Host
- Partic.
- 9