RMQ(Range Minimum/Maximum Query)问题是求区间最值问题。对于长度为 n 的数组 A,进行若干次查询,对于区间 [L,R] 返回数组A中下标在 [L,R] 中的最小(大)值。可以用线段树来解决这个问题,预处理的复杂度是 O(nlogn),查询的复杂度是 O(logn)。更...
分类:
其他好文 时间:
2014-08-08 17:34:26
阅读次数:
200
/*
RMQ问题
-----------------------------------------------------------------------------------------------
用数组:
cnt[i]:第i段中数的个数(每一段是指所有数都同的一段数)(在这里该数组相当于RMQ问题中的A[]数组)
num[i]:位置i所在段的编号
left1[i]:位置i左端点的位置...
分类:
其他好文 时间:
2014-08-07 00:48:27
阅读次数:
191
RMQ算法,是一个快速求区间最值的离线算法,预处理时间复杂度O(n*log(n)),查询O(1),所以是一个很快速的算法,当然这个问题用线段树同样能够解决。
问题:给出n个数ai,让你快速查询某个区间的的最值。
算法分类:DP+位运算
算法分析:这个算法就是基于DP和位运算符,我们用dp【i】【j】表示从第 i 位开始,到第 i + 2^j 位的最大值或者最小值。
...
分类:
其他好文 时间:
2014-08-06 18:58:52
阅读次数:
222
A Magic Lamp
Time Limit: 2000/1000 MS (Java/Others) Memory Limit:
32768/32768 K (Java/Others)
Problem Descripti...
分类:
其他好文 时间:
2014-08-05 11:23:19
阅读次数:
240
RT,一个ppt里看到的题,不过没讲做法。百度上基本搜不到。自己想了个做法,理论上可行,复杂度也是O(nlogn)。首先,做一次RMQ,求区间最大值。对于任意一个数s[i],可以用logn的时间求出他右边第一个比他大的数:RMQ[i][j]表示从s[i]开始的2^j个数中的最大值。对于确定的i,RM...
分类:
其他好文 时间:
2014-08-05 00:15:58
阅读次数:
302
UVA 12299 - RMQ with Shifts
题目链接
题意:给定一个数组,两种操作,每次query操作输出区间最小值,每次shift操作把选中位置每个位置向左移一位,最左的到最后去
思路:线段树,shift操作中位置个数不会超过30个,那么直接当作点修改来做,那么就变成了简单的线段树了
代码:
#include
#include
#include
u...
分类:
其他好文 时间:
2014-07-30 20:56:34
阅读次数:
331
Frequent values
TimeLimit:3000Ms
You are given a sequence of n integers a1 , a2 , ... , an in non-decreasing order. In addition to that, you are given several queries consisting of indices...
分类:
其他好文 时间:
2014-07-30 20:51:23
阅读次数:
507
题目链接:http://poj.org/problem?id=3264
题目大意:就是给你一串数,问你最大数和最小数的差值。。。。。。。
思路:最基本的线段树,只需要建树和查询,修改都省啦,但是查询要写两个,一个查询最大值,一个查询最小值。。。。。。然后就能AC掉。。。。。但是话说poj把它分类到RMQ中。。。。
code:
#include
#include
#i...
分类:
其他好文 时间:
2014-07-29 22:03:22
阅读次数:
404
求区间内最大数和最小数的差,用两棵线段树,一个维护区间最大值,一个维护区间最小值。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define QUADMEM...
分类:
其他好文 时间:
2014-07-29 22:00:02
阅读次数:
259
UVA 11235 - Frequent values
题目链接
题意:给定一个升序数列,每次询问一个区间[l, r],求出其中相同数字最大的个数
思路:RMQ,由于是升序,所以数字大小相同的必然连在一块,先预处理出一共有多少段,每段包含多少个数字,和原数组中每个位置对应哪一段,最左边位置和最右边位置,然后每次询问的时候,可以把询问[L, R]的时候可以分成三段:
1、L到r[...
分类:
其他好文 时间:
2014-07-29 14:38:28
阅读次数:
192