修好区间和溢出
场景:~/work/rq/psum.cpp 用前缀和回答区间和询问。数小的时候对,数到 10^9、区间一长就出现了负数。 任务:修好 psum.cpp 里的类型,让区间和到 10^14 也算对。make 编译后用 sample.txt 自测
修好 ST 表的对数表
场景:~/work/rq/lg.cpp 用 ST 表回答区间最大值,查询时用一张对数表 lg[len] 算层数。有的询问答错,内存检查还报越界。 任务:修好对数表 lg 的初始化。make 编译(带内存检查)后用 sample.txt 自测
找出线段树的反例
场景:~/work/rq/buggy.cpp 是一个迭代线段树求区间和的程序,它漏处理了一个边界,大多数询问都对,但不是全对。 任务:在 ~/题目.txt 规定的范围里造一组输入(数组 + 一个询问),让 buggy 算错,写进 ~/wor
最近更大元素问题(C++)
「每个元素右边第一个比它大的数」这类问题,最适合用【0】。
滑动窗口最值问题
第 1 步:窗口长 3,一格一格往右滑 第 2 步:第 1 个窗口:最大的亮起 第 3 步:第 2 个窗口:最大的亮起 第 4 步:第 3 个窗口:最大的亮起 第 5 步:第 4 个窗口:最大的亮起 第 6 步:每个窗口都重扫一遍就慢了 1
暴力求窗口最值有多慢
每个窗口都重新扫一遍求最大,n = 10^6、k = 10^3 时大约要比较【0】次。
单调结构为什么快
单调栈、单调队列能做到线性时间,是因为【0】。
单调队列比单调栈多了什么
单调队列相比单调栈,多了【0】这一步。
两个窗口的最大值之和
运行下面这段程序: #include <algorithm> #include <deque> #include <iostream> #include <string> #include &
单调栈里存的是什么
第 1 步:上:数;下:右边第一个更大 第 2 步:2 进栈等着 第 3 步:1 进栈等着 第 4 步:3 来了:弹出比它小的 第 5 步:1 进栈等着 第 6 步:4 来了:弹出比它小的 第 7 步:还在栈里的:右边没有更大 2 1 3