POJ 3264 Balanced Lineup
2013-03-20 22:21
381 查看
大意略。
#include <iostream> #include <cstdlib> #include <cstdio> #include <string> #include <cstring> #include <cmath> using namespace std; const int maxn = 50010; const int maxd = 17; // log10(50010) / log10(2); int n, m; int A[maxn]; int minv[maxn][maxd], maxv[maxn][maxd]; void RMQ_init() { for(int i = 1; i <= n; i++) { minv[i][0] = A[i]; maxv[i][0] = A[i]; } for(int j = 1; (1<<j) <= n; j++) { for(int i = 1 ; i+(1<<j)-1 <= n; i++) { minv[i][j] = min(minv[i][j-1], minv[i+(1<<(j-1))][j-1]); maxv[i][j] = max(maxv[i][j-1], maxv[i+(1<<(j-1))][j-1]); } } } int RMQ(int L, int R) { int k = 0; while(1<<(k+1) <= R-L+1) k++; int a = min(minv[L][k], minv[R-(1<<k)+1][k]); int b = max(maxv[L][k], maxv[R-(1<<k)+1][k]); return b-a; } void read_case() { for(int i = 1; i <= n; i++) scanf("%d", &A[i]); RMQ_init(); } void solve() { read_case(); while(m--) { int L, R; scanf("%d%d", &L, &R); int ans = RMQ(L, R); printf("%d\n", ans); } } int main() { while(~scanf("%d%d", &n, &m)) { solve(); } return 0; }
相关文章推荐
- poj 3264 Balanced Lineup(线段树无区)
- POJ 3264 Balanced Lineup
- POJ 3264 Balanced Lineup-初入算法 线段树
- [POJ] - 3264 Balanced Lineup [RMQ][ST]
- POJ 3264 Balanced Lineup(第一道线段树)
- POJ 3264 Balanced Lineup(RMQ)
- 【POJ 3264】【RMQ 或者线段树】Balanced Lineup 【查询区间内最大最小值的差】
- poj 3264 Balanced Lineup (线段树模板题)
- poj 3264 Balanced Lineup 线段树
- POJ 3264 Balanced Lineup
- ACM POJ 3264 Balanced Lineup(线段树)
- poj 3264 Balanced Lineup
- POJ 3264 Balanced Lineup(RMQ_ST)
- poj 3264 Balanced Lineup ST
- poj 3264 Balanced Lineup(基础线段树)
- POJ 3264 Balanced Lineup 最基本的RMQ
- poj 3264 Balanced Lineup(ST)
- POJ-3264 Balanced Lineup -------RMQ/线段树
- POJ 3264 Balanced Lineup
- POJ-3264 Balanced Lineup(rmq模板题)