RMQ(一维)

来源:互联网 发布:克里诺林裙淘宝 编辑:程序博客网 时间:2024/06/08 10:13
///一维RMQ-求最大值#include<iostream>#include<cstdio>#include<queue>#include<set>#include<cstring>#include<vector>#include<algorithm>using namespace std;typedef long long LL;const int MAXN=5e4+5;int dp[MAXN][20];int mm[MAXN];//初始化RMQ,b数组下标从1开始void initRMQ(int n,int b[]){    mm[0]=-1;    for(int i=1;i<=n;i++)    {        mm[i]=((i&(i-1))==0)?mm[i-1]+1:mm[i-1];        dp[i][0]=b[i];    }    for(int j=1;j<=mm[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(int x,int y){    int k=mm[y-x+1];    return max(dp[x][k],dp[y-(1<<k)+1][k]);}int main(){    return 0;}
原创粉丝点击