zoukankan      html  css  js  c++  java
  • RMQ模板

    f[i][j]表示从位置i开始,长度为2^j的一段区间的最值

    以最小值为例:

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<cstring>
     6 #include<queue>
     7 #include<map> 
     8 #include<string>
     9 #define ll long long
    10 #define inf 214748364 
    11 #define DB double
    12 using namespace std;
    13 inline int read()
    14 {
    15     int x=0,w=1;char ch=0;
    16     while(ch<'0' || ch>'9'){if(ch=='-')w=-1;ch=getchar();}
    17     while(ch>='0' && ch<='9') x=(x<<3)+(x<<1)+ch-'0',ch=getchar();
    18     return x*w;     
    19 }
    20 int n,m;
    21 int a[100002];
    22 int f[100002][30];
    23 void YU()
    24 {
    25     for(int i=1;i<=n;i++)
    26      f[i][0]=a[i];
    27     for(int j=1;(1<<j)<=n;j++)
    28      for(int i=1;i+(1<<j)-1<=n;i++)
    29       f[i][j]=min(f[i][j-1],f[i+(1<<(j-1))][j-1]);
    30 } 
    31 int MIN(int l,int r)
    32 {
    33     int k=log2(r-l+1);
    34     return min(f[l][k],f[r-(1<<k)+1][k]);
    35 }
    36 int main()
    37 {
    38     n=read();m=read();
    39     for(int i=1;i<=n;i++) a[i]=read();
    40     YU();
    41     for(int i=1;i<=m;i++)
    42     {
    43      int l,r;
    44      l=read();r=read();
    45      printf("%d ",MIN(l,r));    
    46     }
    47     return 0;
    48 }

    原理:意会

    加油!

  • 相关阅读:
    Semaphore使用
    不可变对象
    Java锁--Lock实现原理(底层实现)
    Lambda Expressions and Functional Interfaces: Tips and Best Practices
    注解的作用
    linux命令大全
    linux &和&&,|和||
    SpringCloud 商品架构例子(一)
    springcloud starter(一)
    dubbo(一)
  • 原文地址:https://www.cnblogs.com/adelalove/p/8483777.html
Copyright © 2011-2022 走看看