1 条题解

  • 0
    @ 2019-08-20 22:19:45

    RMQ标准模版题

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int n,m,a[200001],pm[200001][19];
    int t2[19];
    int main(){
        register int i,j,l,r;
        scanf("%d %d",&n,&m);
        for(i=1;i<=n;i++){
            scanf("%d",a+i);
            pm[i][0]=a[i];
        }
        int lo=(int)log2(n)+1;
        t2[0]=1;
        for(i=1;i<=18;i++) t2[i]=1<<i;  //t2[i]=2^i
        for(j=1;j<=lo;j++){
            for(i=1;i<=n;i++){//pm[i][j]表示以i为左端点,长度为2^j的区间的最大值 
                    pm[i][j]=max(pm[i][j-1],pm[min(i+t2[j-1],n)][j-1]);
            }
        }
        int ans,k;
        for(i=1;i<=m;i++){
            ans=0; 
            scanf("%d %d",&l,&r);
            k=(int)log2(r-l);
            ans=max(pm[l][k],pm[r-t2[k]+1][k]);
            printf("%d\n",ans);
        }
        return 0;
    }
    
  • 1

信息

ID
1001
难度
4
分类
RMQ数学 点击显示
标签
(无)
递交数
56
已通过
2
通过率
4%
上传者