tyvj P1038 忠诚 ST表(RMQ)

来源:互联网 发布:地理信息系统算法 编辑:程序博客网 时间:2024/05/17 08:16

原题链接:http://www.tyvj.cn/p/1038
ST表的简单应用。

#include<stdio.h>#include<stdlib.h>#include<string.h>#include<math.h>#define BASE 2#define Max_N 100010#define _Log2(_) ((int)(log((double)(_)) / log((double)BASE)))#define _min(a,b) ((a)>(b)?(b):(a))int ST[Max_N][18];void built(int n){    int i, j;    int k = _Log2(n);    for (j = 1; j <= k; j++){        for (i = 0; i + (1 << j) - 1 < n; i++){            ST[i][j] = _min(ST[i][j - 1], ST[i + (1 << (j - 1))][j - 1]);        }    }}int query(int x, int y){    int k = _Log2(y - x + 1);    return _min(ST[x][k], ST[y - (1 << k) + 1][k]);}int main(){#ifdef LOCAL    freopen("in.txt", "r", stdin);    freopen("out.txt", "w+", stdout);#endif    int i, n, m, x, y;    scanf("%d %d", &n, &m);    for (i = 0; i < n; i++) scanf("%d", &ST[i][0]);    built(n);    for (i = 0; i < m; i++){        scanf("%d %d", &x, &y);        printf("%d", query(x - 1, y - 1));        if (i < m) printf(" ");    }    return 0;}
0 0
原创粉丝点击