RMQ是一类询问区间最小/最大值的问题. 这类问题一般分成两类:静态区间(无修改),动态区间(带修改). 对于动态区间查询最大/最小,我们显然可以用线段树来解决…… 那么对于静态区间查询最大/最小的问题,我们一般用ST算法解决.(显然这个我们也可以用线段树) 这个算法相比于线段树来说有以下优点: ·程序实现比较简单. ·运行速度快,常数小. 接下来为了解释方便,我们假设我们要查询区间的最大值. 一.ST算法的实质 ST算法的实质是动态规划. 现在我们有一组数a[1…n]; 我们定义f(i,j)表…
给定一个数组,求出给定区间[l,r]中元素的最大值或最小值或者最值的索引. 一看到这个题目,简单,看我暴力出奇迹.暴力当然是可行的.但是时间复杂度很高(O(n^2)).线段树,树状数组也可以解决这个问题,复杂度(O(nlogn))的预处理,最终查询为O(次数*logn). 而今天用ST(Sparse_Table)算法,也是O(nlogn)的预处理,但是是单次查询为O(1),挺高效的. 我们现在给定一组数据 n==9,元素为2,4,6,8,9,1,2,3,4.一个二维数组f[MAX][MAX];假…
我接触 OI也快1年了,然而只写了3篇博客...(而且还是从DP跳到了主席树),不知道我这个机房吊车尾什么时候才能摸到大佬们的脚后跟orz... 前言:主席树这个东西,可以说是一种非常畸形的数据结构(是线段树畸形程度的两倍),然而不学又不行,在考试中出现的频率也很高(?),更重要的是它向我们展示了一个船新的思想--可持久化. 在我学习主席树时,我在网上查了一篇又一篇博客,然而还是感到非常懵逼 0_0 ,这些博客大多由静态区间第k小这一问题来作为学习主席树的切入点,然而--当我学会主席树之后,我才…
在Guava中新增了一个新的类型Range,从名字就可以了解到,这个是和区间有关的数据结构.从Google官方文档可以得到定义:Range定义了连续跨度的范围边界,这个连续跨度是一个可以比较的类型(Comparable type).比如1到100之间的整型数据. 在数学里面的范围是有边界和无边界之分的:同样,在Guava中也有这个说法.如果这个范围是有边界的,那么这个范围又可以分为包括开集(不包括端点)和闭集(包括端点):如果是无解的可以用+∞表示.如果枚举的话,一共有九种范围表示: Guava…
傻傻地敲了好多遍ST表. 10119. 「一本通 4.2 例 1」数列区间最大值 #include <bits/stdc++.h> using namespace std; const int N = 1000005; struct st { int a[N][21]; void build(int *src, int n) { for (int i = 1; i <= n; i++) a[i][0] = src[i]; for (int i = 1; i <= 20; i++)…
Range对象之cloneRange和cloneContents 代码效果如下 首次点击“选择内容“按钮提示如下 接着会显示 最后显示 以下为整个代码 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> <script> fu…
Range对象基本用法 效果图如下(在谷歌浏览器下的展示)…
public Cursor query (boolean distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit) 其中各种参数意思如下(如果其中某个参数不设置,可以指定为null): distinct:distinct true if you want each r…
这个例子相当复杂.我先简单说说这个例子是干啥的. 在UI上,提供了一个下拉框.两个滑动杆,以确定三个参数,使用这三个参数进行空间查询.这个例子就颇带空间查询的意思了. 第一个参数是油井类型,第二个参数是油井的缓冲半径,第三个参数是地震级别. 给定油井的类型,给定油井的缓冲半径(缓冲区分析生成),给定地震级别,就能在油井附近以这个缓冲半径为圆搜索出符合给定地震级别的地震点. 这个例子是干嘛的呢? “因为开采油田会导致地下空间坍塌,而引发地震.” 看看搜索结果(随便选的参数): 橙色点即为搜索结果(…
range函数的三种用法:>>> range(1,5) # 代表从1到5(不包含5) [1, 2, 3, 4] >>> range(1,5,2) # 代表从1到5,间隔2(不包含5) [1, 3] >>> range(5) # 代表从0到5(不包含5) [0, 1, 2, 3, 4]…