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



  • 相关阅读:
    ES6
    django创建超级用户
    小程序-网络请求api
    小程序-数据双向绑定
    POJ2406 Power Strings
    POJ2758 Checking the Text
    LightOJ1197
    51Nod
    CF55D
    Kattis
  • 原文地址:https://www.cnblogs.com/qiu520/p/3198321.html
Copyright © 2011-2022 走看看