标签:
题目大意就是给定区间,求区间最值。
这里采用了RMQ的ST算法,直接套的模板。
代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; const int maxN = 1005; int n, q; int a[maxN]; int ma[maxN][20]; void RMQ() { memset(ma, 0, sizeof(ma)); for (int i = 0; i < n; ++i) ma[i][0] = a[i]; for (int j = 1; (1<<j) <= n; ++j) for (int i = 0; i+(1<<j)-1 < n; ++i) ma[i][j] = max(ma[i][j-1], ma[i+(1<<(j-1))][j-1]); } int query(int lt, int rt) { int k = 0; while ((1<<(k+1)) <= rt-lt+1) k++; return max(ma[lt][k], ma[rt-(1<<k)+1][k]); } void input() { scanf("%d", &n); for (int i = 0; i < n; ++i) scanf("%d", &a[i]); RMQ(); } void work() { scanf("%d", &q); int u, v, ans; for (int i = 0; i < q; ++i) { scanf("%d%d", &u, &v); ans = query(u-1, v-1); printf("%d\n", ans); } } int main() { //freopen("test.in", "r", stdin); int T; scanf("%d", &T); for (int times = 0; times < T; ++times) { input(); work(); } return 0; }
ACM学习历程—HDU 5443 The Water Problem(RMQ)(2015长春网赛1007题)
标签:
原文地址:http://www.cnblogs.com/andyqsmart/p/4808216.html