📜  门|门 IT 2006 |第 64 题(1)

📅  最后修改于: 2023-12-03 15:42:21.700000             🧑  作者: Mango

题目介绍

题目名称:门|门 IT 2006 |第 64 题

这是一个经典的编程题目,考察程序员对基础算法和编程能力的掌握程度。题目要求输入一组数据,对数据进行处理,最后输出结果。题目难度适中,适合初学者练习。

题目描述

有 $n$ 个人排成一排,从左到右依次编号为 $1, 2, 3, ..., n$。现在有 $m$ 个操作,请你模拟这 $m$ 个操作的过程。每个操作表示为一个长度为 $3$ 的字符串,格式如下:

  1. 插入操作:'I x k',表示在编号为 $x$ 的人的左边插入一个编号为 $k$ 的人。

  2. 删除操作:'D k',表示删除编号为 $k$ 的人。

  3. 查询操作:'Q x y',表示查询从编号为 $x$ 到编号为 $y$ 的人的身高总和。

输入格式

第一行输入两个整数 $n$ 和 $m$,表示人数和操作次数。

接下来 $n$ 行,每行输入一个整数表示对应编号的人的身高。

接下来 $m$ 行,每行为一个操作字符串(长度为 $3$)。

输出格式

对于每个查询操作,在一行中输出查询结果。

输入样例
6 4
176
180
182
173
178
185
I 3 200
Q 1 6
D 4
Q 1 6
输出样例
1074
1165
分析

这是一道模拟题,我们需要维护人员的身高信息以及操作的有序集合。操作可以分为三种:插入、删除和查询。对于插入和删除操作,我们可以使用双向链表维护人员信息;对于查询操作,我们可以使用前缀和进行快速计算。

在实现时,我们可以使用 C++ 的 STL 库中的 list 来实现双向链表,使用 vector 来存储人员的身高信息,使用前缀和来处理查询请求。具体实现细节可以参考下方 C++ 代码片段。