数字盒子

数字盒子

题目链接:算法训练营 - 第一周 (简单数据结构)数字盒子

问题描述

你有一个盒子,你可以往里面放数,也可以从里面取出数。

初始时,盒子是空的,你会依次做 Q 个操作,操作分为两类:

  1. 插入操作:询问盒子中是否存在数 x,如果不存在则把数 x 丢到盒子里。
  2. 删除操作:询问盒子中是否存在数 x,如果存在则取出 x。

对于每个操作,你需要输出是否成功插入或删除。

输入

第一行一个正整数 Q,表示操作个数。

接下来 Q 行依次描述每个操作。每行 2 个用空格隔开的非负整数 op,x 描述一个操作:op 表示操作类型,op=1 则表示这是一个插入操作,op=2 则表示这是一个删除操作;x 的意义与操作类型有关,具体见题目描述。

数据范围

对于 100% 的数据,保证 x<10^18,Q≤5*10^5。


思路

方法一 ,使用set直接进行模拟,复杂度O(nlogn)

方法二,使用散列表,将一个大数取模,转换成一个较小的数储存起来。如果离线的做的话,最好是直接将其离散化,如果要在线的做就比较有意思了,就是上述的思路,比较不妥的是可能会有一些数字出现重复,那么就在原来储存的vectorvp[MAXN]里面把原来的数字压进去,每次O(1)的时间访问到这个vector后再在里面进行遍历,看数字有无出现过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值