POJ 3264 Balanced Lineup(ST表)
2017-08-22 21:29
489 查看
题目链接:点击打开链接
裸的ST表,水题
裸的ST表,水题
// POJ 3264 Balanced Lineup.cpp 运行/限制:3375ms/5000ms #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> using namespace std; int n; int a[50005], minValue[50005][20], maxValue[50005][20], upper[50005];//upper[i]相当于(int)floor(log(i)/log(2.0)) void init() { upper[0] = -1; for (int i = 1; i <= 50005; i++) { upper[i] = ((i & (i - 1)) == 0) ? upper[i - 1] + 1 : upper[i - 1]; } } void rmq_init() {//离线预处理 for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); minValue[i][0] = maxValue[i][0] = a[i]; } int k = upper ; for (int i = 1; i <= k; i++) { for (int j = 1; j + (1 << i) - 1 <= n; j++) { minValue[j][i] = min(minValue[j][i - 1], minValue[j + (1 << (i - 1))][i - 1]); maxValue[j][i] = max(maxValue[j][i - 1], maxValue[j + (1 << (i - 1))][i - 1]); } } } int rmq(int le, int rig) {//在线查询 int k = upper[rig - le + 1]; return max(maxValue[le][k], maxValue[rig - (1 << k) + 1][k]) - min(minValue[le][k], minValue[rig - (1 << k) + 1][k]); } int main() { int a, b, q; init(); while (scanf("%d%d", &n, &q) != EOF) { rmq_init(); for (int i = 0; i < q; i++) { scanf("%d%d", &a, &b); printf("%d\n", rmq(a, b)); } } return 0; }
相关文章推荐
- POJ 3264 Balanced Lineup(RMQ_ST)
- poj3264——Balanced Lineup(ST算法及线段树操作)
- POJ 3264 Balanced Lineup(ST)
- POJ 3264 Balanced Lineup (ST算法入门)
- poj 3264 Balanced Lineup(ST)
- poj 3264 Balanced Lineup ST
- POJ3264 Balanced Lineup (RMQ & ST)
- [POJ 3264] Balanced Lineup (ST表)
- Poj 3264 Balanced Lineup【RMQ----ST算法】
- [POJ 3264]Balanced Lineup(ST算法求RMQ)
- POJ 3264 Balanced Lineup(RMQ_ST)
- [POJ] - 3264 Balanced Lineup [RMQ][ST]
- poj 3264 Balanced Lineup【RMQ-ST查询区间最大最小值之差 +模板应用】
- poj 3264 Balanced Lineup ST
- 【bzoj 1699 & 1636】【POJ 3264】Balanced Lineup(st表|RMQ)
- POJ - 3264 - Balanced Lineup (线段树)
- poj 3264 Balanced Lineup(线段树)
- 【线段树 + 详细注释】北大 poj 3264 Balanced Lineup
- POJ 3264 Balanced Lineup(RMQ)
- poj 3264 Balanced Lineup (线段树)