RMQ(模板)

void RMQ_max_init( int n )
{   memset(dp, 0x00, sizeof(dp));
    for(int i = 1; i <= n; i++)     dp[i][0] = a[i];   for(int j = 1; (1<<j) <= n; j++)
        for(int i = 1; i+(1<<j)-1 <= n; i++)
            dp[i][j] = max(dp[i][j-1], dp[i+(1<<(j-1))][j-1] );
}
int RMQ_max( int L, int R, int n )
{
    int k = 0;
    while( (1<<(k+1)) <= R-L+1 )    k++;
    return max( dp[L][k], dp[R-(1<<k)+1][k] );
}
时间: 2024-10-12 03:18:20

RMQ(模板)的相关文章

RMQ模板

附上一个详细的大佬的讲解  http://blog.csdn.net/niushuai666/article/details/6624672 RMQ模板(NYOJ 119) #include <cstdio> #include <cstring> #include <iostream> #include <map> #include <vector> #include <algorithm> #include <cmath>

POJ 3264:Balanced Lineup(RMQ模板题)

http://poj.org/problem?id=3264 题意:给出n个数,还有q个询问,询问[l,r]区间里面最大值和最小值的差值. 思路:RMQ模板题,开两个数组维护最大值和最小值就行. 1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <algorithm> 5 using namespace std; 6 #define N 50010 7 #define

POJ 3264:Balanced Lineup Rmq模板

Balanced Lineup 题目链接: http://poj.org/problem?id=3264 题意: 求区间最大值和最小值的差 题解: Rmq模板题 代码 #include<stdio.h> #include<math.h> const int N=5e4+1; int dpmax[N][17]; int dpmin[N][17]; int mmax(int x,int y) { return x>y?x:y; } int mmin(int x,int y) {

RMQ 模板一份

 1 void RMQ_Init(const vector<int>& A) 2 { 3     int n=A.size(); 4     for (int i=0;i<n;i++) d[i][0]=A[i]; 5     for (int j=1;(1<<j)<=n;j++) 6         for (int i=0;i+(1<<j)-1<n;i++) 7             d[i][j]=min(d[i][j-1],d[i+(1

静态RMQ模板题 contest 静态RMQ T2

Description Wind设计了很多机器人.但是它们都认为自己是最强的,于是,一场比赛开始了.机器人们都想知道谁是最敏捷的,于是它们进行了如下一个比赛.首先,他们面前会有一排共n个数,它们比赛看谁能最先把每连续k个数中最大和最小值写下来,当然,这些机器人运算速度都很快,它们比赛的是谁写得快.但是Wind也想知道答案,你能帮助他吗? Input 每组测试数据,第1行为n,k,第2行共n个数,为数字序列,所有数字均在longint范围内. Output 共n-k+1行 第i行为第i-i+k-1

LCA上的RMQ模板算法

How far away ? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 10764    Accepted Submission(s): 3923 Problem Description There are n houses in the village and some bidirectional roads connecting

RMQ 模板题 poj 3264

题目:点这里 题意:给一个长度n的数列,然后又Q个询问,问L   到R   中最大值与最小值的差. 分析:RMQ 的模板题. 代码: #include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; const int max_=50005; int minm,maxm; int dp_max[max_][20],dp_min[ma

RMQ 模板 2012-09-13

Program Stone; var i,j,k,l,n,m,xmi,big,sma:longint; h:array[1..50000]of longint; tf:array[0..16]of longint; max,min:array[1..50000,0..16]of longint; function wmax(a,b:longint):longint; begin if a>b then wmax:=a else wmax:=b; end; function wmin(a,b:lo

算法分类整理+模板③:RMQ

最开始是打算以LCA作为第三篇算法整理的,但是由于学习LCA时发现自己的RMQ学习的不够扎实,所以先复习一下RMQ.本文感谢队友某淞的学习笔记. 最初看到RMQ模板的时候感觉好高端,感觉里面的各种数组,位移运算非常复杂.所以对于任何算法的学习我觉得都要分为以下的几步进行: 1.了解这种算法能解决什么类的问题.2.知道这种算法的最坏时间复杂度和期望时间复杂度,今后看到题的时候能通过数据范围去快速去判定某些题的解法.3.了解算法的思想和最核心的代码.4.最后就是用由浅入深的题目进行训练,直到完全掌握