POJ 3264 Balanced Lineup [RMQ]
2012-05-23 21:45
483 查看
求区间最大值与最小值之差。
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; const int maxn = 50010; int n, q, a, b; int minh[maxn][16]; // minh[i][j]: h[i]~h[i+(1<<j)-1]的最小值 int maxh[maxn][16]; int h[maxn]; void RMQ() { for (int i = 1; i <= n; ++i) { minh[i][0] = h[i]; maxh[i][0] = h[i]; } for (int j = 1; (1 << j) <= n; ++j) { for (int i = 1; i + (1 << j) - 1 <= n; ++i) { minh[i][j] = min(minh[i][j-1], minh[i+(1<<(j-1))][j-1]); maxh[i][j] = max(maxh[i][j-1], maxh[i+(1<<(j-1))][j-1]); } } } int query(int L, int R) { int k = (int)(log((double)R - L + 1) / log(2.0)); return max(maxh[L][k], maxh[R+1-(1<<k)][k]) - min(minh[L][k], minh[R+1-(1<<k)][k]); } int main() { scanf("%d %d", &n, &q); for (int i = 1; i <= n; ++i) scanf("%d", &h[i]); RMQ(); for (int i = 0; i < q; ++i) { scanf("%d %d", &a, &b); printf("%d\n", query(a, b)); } return 0; }
相关文章推荐
- |poj 3264|RMQ|Balanced Lineup
- poj 3264 Balanced Lineup (RMQ)
- poj 3264 Balanced Lineup 【RMQ 裸题】
- POJ 3264 Balanced Lineup【RMQ附模板】
- poj 3264 Balanced Lineup (RMQ算法 模板题)
- poj 3264 -Balanced Lineup (RMQ与线段树两种做法)
- POJ 题目3264 Balanced Lineup(RMQ)
- POJ 3264 Balanced Lineup( 线段树&&RMQ )
- 【POJ 3264】【RMQ 或者线段树】Balanced Lineup 【查询区间内最大最小值的差】
- POJ 3264 Balanced Lineup(RMQ)
- POJ 3264 Balanced Lineup RMQ
- poj 3264 Balanced Lineup(RMQ)
- POJ 3264 Balanced Lineup(简单的RMQ)
- POJ - 3264 Balanced Lineup (RMQ问题求区间最值)
- POJ 3264-Balanced Lineup-RMQ问题
- poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】
- POJ-3264 Balanced Lineup【RMQ】
- poj 3264 Balanced Lineup(rmq vs 线段树)
- POJ 3264 Balanced Lineup 线段树 RMQ
- POJ 3264 Balanced Lineup(RMQ)