zoukankan      html  css  js  c++  java
  • [tem]RMQ(st)

    倍增思想

    代码中有两个测试

    #include <iostream>
    #include <cmath>
    using namespace std;
    const int N=1e5;
    int a[N],f[N][21];
    
    void init(int n){
        for(int i=1;i<=n;i++) f[i][0]=a[i];
        
        for(int j=1;j<=20;j++)
            for(int i=1;i+(1<<j)-1<=n;i++)
                f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
    }
    
    int RMQ(int l,int r){
        int k=log(r-l+1)/log(2);    //2^k<=l~r
        return min(f[l][k],f[r-(1<<k)+1][k]);
    }
    int main(int argc, const char * argv[]) {
    
        //test beizeng
        //find 2^k<=l~r
        int l=93333338,r=137123411;
        int ans1,ans2;
        ans1=log(r-l+1)/log(2);          //advise     
        while ((1<<(ans2+1))<=r-l+1) ans2++;
        printf("test1: %d %d
    
    ",ans1,ans2);
    
        
        //test beizeng
        //change into binary
        int n=33;
        for(int i=0;i<=16;i++)          //advise
            if(n&(1<<i)) printf("t1: %d ",i);
    printf(
    " "); for(int i=16;i>=0;i--) if(n>=(1<<i)) printf("t2: %d ",i),n^=(1<<i); return 0; }
  • 相关阅读:
    POJ
    POJ
    POJ
    POJ-1797 Heavy Transportation
    POJ
    HDU
    CF-576 C MP3 (离散化)
    Pandas 用法汇总
    Pandas 的使用
    Numpy 算术函数
  • 原文地址:https://www.cnblogs.com/candy99/p/5752485.html
Copyright © 2011-2022 走看看