码迷,mamicode.com
首页 > 其他好文 > 详细

rmq区间最值

时间:2018-09-04 20:51:26      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:pmi   ret   while   复杂   区间   时间复杂度   数组   nlog   log   

时间复杂度O(NlogN)+O(Q)

int a[N];
int dpmax[N][20],dpmin[N][20];
void first(int n)//预处理长度为n的数组
{
    mm(dpmax,0);
    mm(dpmin,0);
    rep(i,1,n+1)
    {
        dpmax[i][0]=a[i];
    }
    for(int j=1;(1<<j)<=n;j++)
    {
        for(int i=1;i+(1<<j)-1<=n;i++)
        {
            dpmax[i][j]=max(dpmax[i][j-1],dpmax[i+(1<<(j-1))][j-1]);
            dpmin[i][j]=min(dpmin[i][j-1],dpmin[i+(1<<(j-1))][j-1]);
        }
    }
}
int fmax(int l,int r)//闭区间[l,r]内的最大值
{
    int x=0;
    while(l-1+(1<<x)<=r) x++;
    x--;
    return max(dpmax[l][x],dpmax[r-(1<<x)+1][x]);
}
int fmin(int l,int r)//闭区间[l,r]内的最小值
{
    int x=0;
    while(l-1+(1<<x)<=r) x++;
    x--;
    return min(dpmin[l][x],dpmin[r-(1<<x)+1][x]);
}

rmq区间最值

标签:pmi   ret   while   复杂   区间   时间复杂度   数组   nlog   log   

原文地址:https://www.cnblogs.com/wzl19981116/p/9588251.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!