zoukankan      html  css  js  c++  java
  • RMQ求解->ST表

    ST表

    这是一种神奇的数据结构,用nlogn的空间与nlongn的预处理得出O(1)的区间最大最小值(无修)

    那么来看看这个核心数组:ST[][]

    ST[i][j]表示从i到i+(1<<j)的范围内的最大/最小值

    那么来看看代码吧。

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 int ST[100010][21],n;
     5 void makeST()
     6 {
     7     for(int j=1;j<=20;j++)
     8     {
     9         for(int i=1;i+(1<<j)-1<=n;i++)  ST[i][j]=min(ST[i][j-1],ST[i+(1<<(j-1))][j-1]);
    10     }
    11     return;
    12 }
    13 int getpow(int x)
    14 {
    15    int ans=0;
    16    while((1<<ans)<=x) ans++;
    17    return ans-1;
    18 }
    19 int main()
    20 {
    21     int m;
    22     scanf("%d%d",&n,&m);
    23     for(int i=1;i<=n;i++)
    24     {
    25         scanf("%d",&ST[i][0]);
    26     }
    27     makeST();
    28     int x,y;
    29     while(m--)
    30     {
    31         scanf("%d%d",&x,&y);
    32         int t=getpow(y-x+1);
    33         printf("%d ",min(ST[x][t],ST[y-(1<<t)+1][t]));
    34     }
    35     return 0;
    36 }
    P1816 忠诚
     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 int ST[100010][21],n;
     5 void makeST()
     6 {
     7     for(int j=1;j<=20;j++)
     8     {
     9         for(int i=1;i+(1<<j)-1<=n;i++)  ST[i][j]=max(ST[i][j-1],ST[i+(1<<(j-1))][j-1]);
    10     }
    11     return;
    12 }
    13 int getpow(int x)
    14 {
    15    int ans=0;
    16    while((1<<ans)<=x) ans++;
    17    return ans-1;
    18 }
    19 int main()
    20 {
    21     int m;
    22     scanf("%d%d",&n,&m);
    23     for(int i=1;i<=n;i++)
    24     {
    25         scanf("%d",&ST[i][0]);
    26     }
    27     makeST();
    28     int x,y;
    29 
    30     while(m--)
    31     {
    32         scanf("%d%d",&x,&y);
    33         int t=getpow(y-x+1);
    34         printf("%d
    ",max(ST[x][t],ST[y-(1<<t)+1][t]));
    35     }
    36 
    37     return 0;
    38 }
    P3865 ST表模板

    好,其实也没啥好说的,简单的一批不是吗?

     收回上句......

    来看看紫题ST表+并查集 萌萌哒

  • 相关阅读:
    sql去重复
    验证 decimal 和 数字
    OleDbConnection读取Excel
    排班知识点
    sql基础
    SQL Server 获取月份的具体天数
    2016 Excel 展示 Sqlserver数据并制作图表
    SQL Server跨域查询
    SqlSugar中CASE WHEN的用法
    Microsoft.AspNetCore.Mvc.Versioning学习笔记
  • 原文地址:https://www.cnblogs.com/huyufeifei/p/8709970.html
Copyright © 2011-2022 走看看