补写线段树区间查询
场景:实验机上 ~/work/adv/seg.cpp 已经会建线段树了,但区间查询 query 还没写。 任务:补全 query。make 编译(带内存检查),./seg < sample.txt 自测。check 会用每次现造的随机
十万次区间和一秒内
场景:~/work/adv/sum.cpp 支持「单点加」和「区间求和」两种操作,结果对,但 10 万个数、12 万次操作要跑好几秒。 任务:改写 sum.cpp,让大数据在 1 秒内跑完,输出格式不变。make 编译(-O2),time
实现树状数组两个操作
场景:~/work/adv/bit.cpp 按指令操作一个树状数组,add 和 sum 两个函数还是空的。 任务:补全 add 和 sum。make 编译(带内存检查)后用 sample.txt 自测;check 会用随机的操作序列和一个朴
线段树数组开小了
场景:~/work/adv/seg2.cpp 的线段树数组只开了 2n 格,数一多内存检查就报越界。 任务:把数组开到够用的大小,make 编译后运行时不再报内存错误、结果正确才算过。 可操作范围:只在分给你的这台实验机上操作。可以改家目录
找出布隆过滤器的误判
场景:~/work/adv/bloom.cpp 读入 added.txt 里的数建一个布隆过滤器,再回答「某个数在不在」。它只用了一个哈希函数,误判不少。 任务:在 ~/题目.txt 给的区间里找一个没被加进去、过滤器却说「可能在」的数,写
修好旋转丢的子树
场景:~/work/adv/avl.cpp 往 AVL 树里插一串数,输出中序遍历和树高。数一多,中序结果就少了一截,内存检查还报泄漏。 任务:修好旋转函数里丢掉子树指针的地方。make 编译后结果正确、内存检查不报错才算过。 可操作范围:
选结构之前的第一件事
第 1 步:记下一段时间里的每个操作 第 2 步:标出所有的「查」 第 3 步:8 次里有 6 次是查 第 4 步:该优化的是查找这一边 查 查 增 查 查 删 查 查 拿到一个需求,动手选数据结构之前,第一件事是【0】。
要按插入顺序列出最近十条
需求里出现「按插入顺序列出最近 10 条」,这句话直接排除了【0】(问的是哪种结构用不了)。
数据量一百万条排除了谁
需求里出现「数据量一百万条」,这句话直接排除了【0】。
随时取出当前最大的那个
需求里出现「随时取出当前最大的那个」,最自然的选择是【0】。