概述: RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j之间的最小/大值。对于一次查询,可以暴力地O(n),但是当查询次数很多的时候,这样的暴力就无法进 ...
分类:
编程语言 时间:
2018-01-29 11:43:50
阅读次数:
180
There are n houses in the village and some bidirectional roads connecting them. Every day peole always like to ask like this "How far is it if I want ...
分类:
编程语言 时间:
2018-01-26 22:50:46
阅读次数:
228
【RMQ】 Range Minimum/Maximum Query 范围最值问题 【ST算法】 解决RMQ问题的有效算法 预处理 经过预处理构造出d,预处理时间复杂度 O(nlogn) 运用动态规划的思想 d(i, j) 表示 范围 i ~ i + 2j-1 的最小值则有状态转移方程 d(i, j) ...
分类:
编程语言 时间:
2018-01-26 00:35:18
阅读次数:
230
1 #include<iostream> 2 using namespace std; 3 #include<cstdio> 4 #include<cstring> 5 /* 6 说明: 7 RMQ<T> rr;定义一个查询区间最小值的数据类型为T 的类 8 SetMaxn(T maxn);设置初始 ...
分类:
编程语言 时间:
2018-01-22 11:59:25
阅读次数:
184
poj2823 Sliding Window 题目大意:给你一个n个数的序列,有一个长度固定的窗口,求出两个数列,分别是窗口从左滑到右,窗口内的最小值和最大值,分两行输出。 注释:n<=$10^6$,内存<=64. 想法:这内存是真恶心啊,正常的ST算法过不去,想到线段树,......咳咳,虽然这道 ...
Frequent Value 题目大意:给你n个数的数列,保证它是单调递增的。给你m个询问,每个询问是询问两个节点之间最长的连续的相等的数的长度。 注释:n,m<=100000。 想法:这道题是我做的第一道有点儿意思的RMQ(RMQ?猛戳)的题。刚学RMQ,就把这道题更出来了。我们仍然采用ST算法。 ...
分类:
其他好文 时间:
2018-01-14 00:53:50
阅读次数:
194
损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。模型的结构风险函数包括了经验风险项和正则项,通常可 ...
分类:
其他好文 时间:
2017-12-02 13:05:47
阅读次数:
197
解决RMQ(Range Minimum/Maximum Query)即区间最大最小值问题。 有一个离线算法(ST算法),这个算法是很高效了,时间是O(nlogn):(用O(nlogn)的时间进行预处理,再用O(1)的时间进行区间查询) 1.先是预处理(用动态规划解决) A数列为:3 2 4 5 6 ...
分类:
其他好文 时间:
2017-11-09 22:49:53
阅读次数:
429
以前都是用的BIT或者线段树(前者多一些)。 对于ST(Sparse Table),在求倍增or公共祖先时见过,说明还有其他用处,所以还是学习一下。 首先是预处理,用动态规划(DP)解决。 设A[i]是要求区间最值的数列,F[i, j]表示从第i个数起连续2^j个数中的最大值。(DP的状态) 例如: ...
分类:
编程语言 时间:
2017-11-05 11:29:01
阅读次数:
224
RMQ问题:求长度为n的数列中,求[i,j]直接的最值。 ST算法:一种动态规划的方法。 一、预处理dp数组 对于区间[i,i+2^j-1]的最值,只需要知道区间[i,i+2^(j-1)-1]和区间[i+2^(j-1),i+2^j-1]的最值即可。 由此可的递推方程:dp[i,i+2^j-1] = ...
分类:
编程语言 时间:
2017-10-19 10:22:33
阅读次数:
186