#1523. tuple模板题
tuple模板题
题目描述
现有一个存储元组(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且均在有效索引范围内)。