zoukankan      html  css  js  c++  java
  • 模板:ST算法及ST表

    https://www.luogu.org/problemnew/show/P3865

    静态区间最大值

    ST算法主要用于多次询问区间内最值问题,

    相比于线段树,它的程序实现更简单,运行速度最快,

    它可以做到O(nlogn)的预处理,以及O(1)回答每个询问

    采用ST算法的条件是没有修改操作,

    所以更适用于没有修改操作并且询问次数较多的情况

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 const int MAXN=100010;
     6 int a[MAXN];
     7 int f[MAXN][32];
     8 int n, m;
     9 int query(int l,int r){
    10     int z=0;
    11     while((1<<z+1)<=r-l+1)     z++;//等价于z=log2(l-r+1)
    12     return max(f[l][z],f[r-(1<<z)+1][z]);  
    13 }
    14 
    15 int main(){
    16     scanf("%d%d",&n,&m);
    17     for(int i=1; i<=n; i++)
    18         scanf("%d",&a[i]);
    19     for(int i=1; i<=n; i++)
    20         f[i][0]=a[i];
    21     for(int j=1; (1<<j)<=n; j++)
    22         for(int i=1; i+(1<<j)-1<=n; i++)
    23             f[i][j]=max(f[i][j-1],f[i+(1<<j-1)][j-1]);
    24     while(m--){
    25         int l, r;
    26         scanf("%d%d",&l,&r);
    27         printf("%d
    ", query(l,r));
    28     }
    29     return 0;
    30 }
  • 相关阅读:
    Jenkins动态部署方案
    01-Java学习笔记
    Tcp实现简单的大小写转换功能
    JavaScript 执行环境 与 变量对象
    JQuery
    JavaScript模板引擎
    ECMA6
    谷歌控制台
    prototype 与 __proto__
    JavaScript Math
  • 原文地址:https://www.cnblogs.com/Aze-qwq/p/9890720.html
Copyright © 2011-2022 走看看