首页 > 其他 > 详细

ST表

时间:2019-08-21 20:15:48      阅读:92      评论:0      收藏:0      [点我收藏+]
#include <cstdio>
#include <iostream>
#include <cmath>
using namespace std;
int read()
{
    int x = 0 , fx = 1;
    char ch = getchar();
    while(ch > 9 || ch < 0)
    {
        if(ch == -)
            fx = -1;
        ch = getchar();
    }
    while(ch >= 0 && ch <= 9)
    {
        x = (x << 3) + (x << 1) + (ch & 15);
        ch = getchar();
    }
    return x * fx;
}
int a[100005][21];
int query(int l , int r)
{
    int k = log2(r - l + 1);
    return max(a[l][k] , a[r - (1 << k) + 1][k]);
}
int main()
{
    int n , m , l , r;
    n = read() , m = read();
    for(int i = 1; i <= n; i++)
        a[i][0] = read();
    for(int j = 1; j <= 20; j++)
        for(int i = 1; i + (1 << j) - 1 <= n; i++)
            a[i][j] = max(a[i][j - 1] , a[i + (1 << (j - 1))][j - 1]);
    for(int i = 1; i <= m; i++)
    {
        l = read() , r = read();
        printf("%d\n" , query(l , r));
    }
    return 0;
}

区间最值

ST表

原文:https://www.cnblogs.com/leo-xy/p/11390799.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!