摘要:
题意:给出n个数的非递减序列,进行q次查询。每次查询给出两个数a,b,求出第a个数到第b个数之间数字的最大频数。如序列:-1 -1 1 1 1 1 2 2 3第2个数到第5个数之间出现次数最多的是数字1,它的频数3。思路:假设查询时的参数为a, b。这道题查询时有以下两种情况:1、 num[a] = num[b]. 即区间内的数字全相同,此时答案为b - a + 1。2、 如果不相同,则以一般情况来讨论。见下图。因为序列为非递减序列,因此值相同的数字必然连续出现。将区间分为3部分。num[a]以及与它值相同的区域构成第一部分,num[b]以及与它值相同的区域构成第三部分。区间[a, b]中剩下 阅读全文
摘要:
题意:有n头牛,编号从1到n,每头牛的身高已知。现有q次询问,每次询问给出a,b两个数。要求给出编号在a与b之间牛身高的最大值与最小值之差。思路:标准的RMQ问题。RMQ问题是求给定区间内的最值问题。当询问量巨大时,最朴素算法必然超时。解决RMQ比较优秀的算法有ST算法。其预处理时间复杂度为O(nlogn),询问的时间复杂度为O(1)。ST的思想如下:假设num数组中的数据从第0位开始存储。用两个二维数组tmax,tmin分别求区间最大与最小值。ST的关键是数组区间的分割。tmax和tmin的下标是一致的,暂且拿tmax举例。预处理:预处理阶段运用的是DP的思想。tmax[i][j]内的值为区 阅读全文