首页 > 试题广场 >

操作序列

[编程题]操作序列
  • 热度指数:1 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解

给出一个长度无限的数列,初始全部为零,有三种操作:

  • 增加操作:给下标为 的数加 。特别注意,如果在下标 内有不为零的数,增加操作无效。
  • 削减操作:让数列中下标最小的不为零数变为零。
  • 查询操作:查询数列中下标为 的数字是多少。

输入描述:
第一行包含一个整数 ,表示操作总数。
随后 N 行,每行由两个数字或一个数字组成。
若一行中有两个数字,分别代表增加操作的 t,c 。
若一行中只有数字-1,执行削减操作。
若一行中只有一个不为 -1的数字,则代表查询操作的数字 t。
保证t,c均为非负整数且在整形范围内。


输出描述:
削减操作时,先输出该数字,再变为零
若序列元素全为零,则削减操作无效,此时输出 "skipped"
查询时,输出该位置上的数
示例1

输入

7
140 1
120 2
100 3
120
100
-1
100

输出

0
3
3
0
示例2

输入

4
140 3
-1
140 1
-1

输出

3
1
示例3

输入

3
-1
-1
-1

输出

skipped
skipped
skipped
头像 RandolphJ
发表于 2020-02-24 18:14:41
这是一道挺不错的STL模拟题,做法也很多,可以借此巩固一下对STL的知识运用 由于数列长度无限,所以我们需要离散化,可以用一个容器(如map,set,建议先了解一下它们的用法及基本的指针用法)存储不为0的数及它的下标 增加操作:给下标为 tt 的数加 cc 。特别注意,如果在下标 [t-30,t+ 展开全文
头像 客牛12345678号
发表于 2020-02-22 23:13:00
java解法,思路比较简单 1、用一个Map来保存每一个下标t和它的值c2、用ArrayList来存储每一个key3、用PriorityQueue来保持一个最小的下标 具体操作: 1、添加操作:首先在【t-30,t+30】这个区间判断是否存在key值,如果存在就不添加,不存在就添加 2、 展开全文
头像 看见我请叫我去学习HA
发表于 2020-02-23 00:16:22
这题灵活运用了std::map - 给出一个长度无限的数列,初始全部为零,有三种操作: - 增加操作:给下标为 t 的数加 c 。特别注意,如果在下标 [t-30,t+30] 内有不为零的数,增加操作无效。 - 削减操作:让数列中下标最小的不为零数变为零。 - 查询操作:查询数列中下标为 tt 的 展开全文