RMQ动态规划的思想int a[1100];int dp[maxn][20];void rmq_init(){ for(int i=0;i<n;i++) dp[i][0]=a[i]; for(int j=1;(1<<j)<=n;j++) for(int i=0...
分类:
其他好文 时间:
2015-09-13 21:24:40
阅读次数:
136
#include #include #include using namespace std; #define M 100010 #define MAXN 500 #define MAXM 500 int dp[M][18]; /* *一维RMQ ST算法 *构造RMQ数组 ma...
分类:
其他好文 时间:
2015-09-13 13:07:48
阅读次数:
159
题目链接:codeforces 332B题目大意:给出一个序列,让找出不互相覆盖的两个长度为k的段,问在两个段的权值和最大的情况下,按照左边段的左端点排序,右边段的左端点作为第二关键字排序,得到的第一个答案。题目分析:
很水的数据结构的题目,我们只需要先利用前缀和预处理出所有长度为k的段的总权值。然后利用rmq维护区间最大值和得到这个最大值取得的段的最左位置。
然后我们枚举第二段的位置,然后找到在采...
分类:
其他好文 时间:
2015-09-12 21:53:08
阅读次数:
131
这道题为裸的RMQ。具体RMQ的意思为区间最值查询,他是先预处理出来每一段的最值,然后查询的时候直接O(1)的复杂度得出结果。其实还是个dp。用Rmin[i][j]表示从i开始长度为2^j这个区间的最值。至于为什么是2^j,因为计算机当中是二进制,移位比较方便。查询的时候也是将一个区间分成两部分,其...
分类:
其他好文 时间:
2015-09-09 21:06:48
阅读次数:
146
士兵杀敌(四)时间限制:2000ms | 内存限制:65535KB难度:5描述南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上,这样,有时候,计算他们中的哪一...
分类:
其他好文 时间:
2015-09-09 00:51:25
阅读次数:
350
题意: 给你一组数列, 查询区间内有出现次数最多的数的频数 RMQ , 对于一个区间, 分为两部分, 从 L 开始连续到 T , T + 1 到 R 显然 答案为 MAX (T – L + 1 , RMQ ( T+1, R)) 对于 T, 可以先预处理出位置 Pos #include #includ...
分类:
其他好文 时间:
2015-09-08 21:58:01
阅读次数:
173
静态询问区间最值的Spares—Table(Tarjan)的算法。这个算法的思想是一个dp,dp[i][j]表示i开头长度为2^j的区间内的最值,然后倍增转移。这道题询问的是出现次数,相同的数字是连续出现的,先把连续出现的数字按段编号,记录出现的次数。因为题目询问给的是原来的数字的下标,记录一下这个...
分类:
其他好文 时间:
2015-09-08 18:17:37
阅读次数:
175
线段树区间更新维护最小值。。。记得下放标记。。。如果线段树上的一个完整区间被修改,那么最小值和最大值增加相应的值后不变,会改变是因为一部分改变而另外一部分没有改变所以维护一下就好。询问的时候也要记得下放标记。。。数据结构快忘了,贴个板。#includeusing namespace std;type...
分类:
其他好文 时间:
2015-09-05 20:35:07
阅读次数:
220
题意:给一个矩阵,然后Q个询问,每个询问有四个数,分别代表询问的子矩阵的左上角和右下角,然后找出子矩阵的最大值输出,然后再把这个值与子矩阵的四个角的值比较,如果有至少一个等于这个最大值就输出“yes”,否则输出“no”。#include #include #include #include #inc...
分类:
其他好文 时间:
2015-09-05 12:19:10
阅读次数:
149
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j 7所以没有更新,但这并不影响询问的结果。2.查询假设我们需要查询区间[l, r]中的最小值,令k = log2(r - l + 1);...
分类:
编程语言 时间:
2015-09-04 19:55:14
阅读次数:
218