这题。。思维上远没有上一题复杂,是一个裸的RMQ。。利用倍增就可以解决了。 1 var n,q,i,j,f,t,c:longint; 2 a:array[0..20,0..25001] of longint; 3 function min(a,b:longint):longint; 4 begin ...
分类:
其他好文 时间:
2015-09-22 22:04:31
阅读次数:
217
一. 区间最大最小值问题 1. RMQint mx[N][20]; //最多能保存524288的长度int RMQ(int l, int r) { int k = 0; while (1> 1; build (lson); bu...
分类:
其他好文 时间:
2015-09-20 22:02:49
阅读次数:
158
1. 概述RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j#include#include#include#include#include#includeusing namespace ...
分类:
编程语言 时间:
2015-09-19 10:46:47
阅读次数:
223
很明显是一道RMQ问题,倍增法,维护一下区域的最大/小值就行了。 1 var n,i,j,q,f,t,times:longint; 2 hmin,hmax:array[0..100,0..50000] of longint; 3 function min(a,b:longint):longint; ...
分类:
其他好文 时间:
2015-09-18 13:27:32
阅读次数:
155
RMQ即求区间(i,j)的最值。通过O(nlogn)处理,O(1)给出答案。RMQ主要是动态规划来做。dp[i][j]表示从i开始的长为2^j的区间最值。那么可以得到dp[i][j]=max(dp[i][j-1],dp[i+(1#include#include#include//#include#d...
分类:
编程语言 时间:
2015-09-18 00:43:43
阅读次数:
285
题目连接:codeforces 279C题目大意:给出一个序列,m次查询,每次给出一个子串,问这个子串是否满足,中间能够找到一个元素,让这个元素作为前后分别单调的分界.题目分析:
首先对于每次查询,我们知道分界一定是最大的元素,所以我们可以用rmq预处理出区间最大。
然后为了判断这个区间是否能够通过最大的元素作为分界点而前后单调,我们可以通过预处理,正向和反向分别扫一遍,记录某一个点的为最大元素的能...
分类:
其他好文 时间:
2015-09-17 11:55:28
阅读次数:
172
A - Balanced LineupCrawling in process... Crawling failed Time Limit:5000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64uSubmit Status Practice P...
分类:
其他好文 时间:
2015-09-15 20:00:56
阅读次数:
193
Problem DescriptionIn Land waterless, water is a very limited resource. People always fight for the biggest source of water. Given a sequence of water...
分类:
其他好文 时间:
2015-09-14 22:44:44
阅读次数:
403
题意:给了一个数列,有多个询问,每个询问求某个区间内的最大值数列长度 1000,询问个数 1000,静态,并不需要RMQ这些,直接暴力 n2 查找每个询问区间取最大值就行了。 1 #include 2 #include 3 #include 4 #include 5 using namespace ...
分类:
其他好文 时间:
2015-09-14 21:13:11
阅读次数:
128
题意:分析:明天再写……#include #include #include using namespace std;#define d(x) const int MAX_N = (int)(4e4) + 100;//call init_RMQ(f[], n) first.//then call q...
分类:
其他好文 时间:
2015-09-14 13:51:13
阅读次数:
168