#include
#include
#include
using namespace std;
#define M 100010
#define MAXN 500
#define MAXM 500
int dp[M][18];
/*
*一维RMQ ST算法
*构造RMQ数组 makermq(int n,int b[]) O(nlog(n))的算法复杂度
*dp[i][j] 表示从i到i+2^j ...
分类:
编程语言 时间:
2015-08-18 22:56:29
阅读次数:
188
题意:N,B,K表示原矩阵为N*N,查询矩阵为B*B,K次查询; 每次查询给出a,b,表示矩阵左上方的坐标为(a,b);求查询矩阵中最大值与最小值之差;思路:二维RMQ,将dp的一三维看做第一维,二四维看做第二维;注意细节;#include#include#includeusing names...
分类:
其他好文 时间:
2015-08-17 21:19:23
阅读次数:
125
题意:求给定区间中出现最多的数的出现次数,原数列为非降序列;思路:将原数列处理为当前数在连续数中的出现顺序;从后向前处理; 对于查询区间[l,r],先通过二分计算与a[r]相同的数的个数(num[r]可能大于1);剩余区间rmq求最大值;在求两种情况的最大值;#include#include#i.....
分类:
其他好文 时间:
2015-08-17 19:11:22
阅读次数:
97
题意:每次操作求区间[L,R]中最大值与最小值之差;参考:http://blog.csdn.net/liang5630/article/details/7917702思路:可以用线段树写,但ST算法求RMQ更方便; dp[i][j]表示从第i个数开始到i+2^j中的最值; 在操作之前,预...
分类:
其他好文 时间:
2015-08-17 17:15:10
阅读次数:
117
RMQ用于区间快速查找最值,适用于期间数值无更改的情况。其预处理的复杂度为O(nlogn),查询的时间复杂度为O(1),对比于线段树的预处理O(nlogn),查询O(logn)来说,在某些情况下有着其独到的优势。
RMQ原理就是在原来的数组上跑一个dp,我们以查询最大值为例,它的状态定义是这样的:
dp[ i ][ j ]:下标从i开始,长度为2^j的区间的最大值。显然dp[ i ][...
分类:
其他好文 时间:
2015-08-15 23:06:39
阅读次数:
167
首先推荐两个博客网址:http://dongxicheng.org/structure/lca-rmq/http://scturtle.is-programmer.com/posts/30055.html[转]tarjan算法的步骤是(当dfs到节点u时): 1 在并查集中建立仅有u的集合,设置该集...
分类:
其他好文 时间:
2015-08-14 21:03:48
阅读次数:
171
1 void RMQ(int num) 2 { 3 for(int j = 1; j < 20; ++j) 4 for(int i = 1; i <= num; ++i) 5 if(i + (1 << j) - 1 <= num) 6 ...
分类:
其他好文 时间:
2015-08-13 09:58:02
阅读次数:
161
//使用rmq办,ma[i][j],同i作为一个起点2^j阵列的最大长度值//启动枚举问最长的子列//枚举的最大长度2^(j-1)和2^(j)z之间//然后在该范围内找到#include#include#include#includeusing namespace std;const int max...
分类:
其他好文 时间:
2015-08-09 14:04:42
阅读次数:
88
题意:n个城市,m条路,每条路有个危险值,要使得从s走到t的危险值最小。回答q个询问,每个询问有s和t,要求输出从s到t最小的危险值。(5万个点,10万条边)思路:其实要求的是任意点对之间的最小瓶颈路的权值。 先对图求一次MST,那么所有的瓶颈路都在上面。但是q0)16 {...
分类:
其他好文 时间:
2015-08-09 13:58:48
阅读次数:
543
题目链接:点击进入
就是一个二维的RMQ问题,其实二维线段树或则是树状数组都是可以做的,但是二维的ST算法编码还是要简单一点。下面这份代码可以作为二维ST算法的模板用。代码如下:#include
#include
#include
#include
using namespace std;int val[255...
分类:
其他好文 时间:
2015-08-09 12:41:29
阅读次数:
106