zoukankan      html  css  js  c++  java
  • NYOJ 119士兵杀敌(三)(RMQ问题)(ST表)

    RMQ问题,即范围最小值问题(Range Minimum Query)

    ST表

    【任务】

    给定一个数组A[n],设计一个数据结构,支持查询操作Query(L,R):计算min{AL,AL+1,...AR}或者max{AL,AL+1,...AR}

     1 #include<cstdio>
     2 #include<iostream>
     3 using namespace std;
     4 #define MAX 180012
     5 int A[MAX][17],B[MAX][17];
     6 
     7 int RMQ(int L,int R)
     8 {
     9     int k = 0;
    10     while((1<<(k+1)) <= R-L+1) k++;
    11     return (max(A[L][k],A[R-(1<<k)+1][k])-min(B[L][k],B[R-(1<<k)+1][k]));
    12 }
    13 int main()
    14 {
    15     //freopen("in.txt","r",stdin);
    16     int i,j,m,n,a,b;
    17     scanf("%d%d",&n,&m);
    18     for(i=1; i<=n; i++)
    19     {
    20         scanf("%d",&a);
    21         A[i][0] = B[i][0] = a;
    22     }
    23     for(j = 1; (1<<j) <= n; j++)
    24         for(i = 1; i+j-1 <= n; i++)
    25         {
    26             B[i][j] = min( B[i][j-1], B[i+(1<<(j-1))][j-1] );
    27             A[i][j] = max( A[i][j-1], A[i+(1<<(j-1))][j-1] );
    28         }
    29     while(m--)
    30     {
    31         scanf("%d%d",&a,&b);
    32         printf("%d
    ",RMQ(a,b));
    33     }
    34     return 0;
    35 }
    View Code



  • 相关阅读:
    mysql 主从服务器配置
    Linux命令
    Kali
    Python进阶
    性能测试工具
    sphinx搜索
    页面静态化
    PHP API接口
    线程的生命周期
    多线程的创建
  • 原文地址:https://www.cnblogs.com/qiu520/p/3198321.html
Copyright © 2011-2022 走看看