poj3264 Balanced Lineup(ST表)
来源:互联网 发布:网页小游戏源码下载 编辑:程序博客网 时间:2024/06/08 17:50
链接:http://poj.org/problem?id=3264
题意:
n头牛排成一行,问a到b这个区间内最高的牛和最矮的牛的身高差。
思路:
这题用的是ST表,初学ST。这题算模板题了,关键还是要理解。。
另外,某位巨巨说用代码中的方法求k值可能会被卡。
代码:
#include <iostream>#include <algorithm>#include <cstring>#include <cstdio>#include <cmath>using namespace std;const int maxn = 50005;struct node{int minn, maxx;};int arr[maxn];node f[maxn][20];void init(int n){for(int i=1; i<=n; i++) f[i][0].maxx = f[i][0].minn = arr[i];int k = floor(log((double)n)/log(2.0));for(int j=1; j<=k; j++){for(int i=1; i<=n; i++){int tag = i+(1<<(j-1));if(tag<=n){f[i][j].maxx = max(f[i][j-1].maxx, f[tag][j-1].maxx);f[i][j].minn = min(f[i][j-1].minn, f[tag][j-1].minn);}}}}int rmq(int i, int j){int k = floor(log(double(j-i+1))/log(2.0));return (max(f[i][k].maxx, f[j-(1<<k)+1][k].maxx) - min(f[i][k].minn, f[j-(1<<k)+1][k].minn));}int main(){int n, m, a, b;while(scanf("%d%d", &n, &m)!=EOF){for(int i=1; i<=n; i++)scanf("%d", &arr[i]);init(n);for(int i=0; i<m; i++){scanf("%d%d", &a, &b);printf("%d\n", rmq(a, b));}}return 0;}
0 0
- [poj3264] Balanced Lineup(st表)
- poj3264 Balanced Lineup(ST表)
- 【poj3264】 Balanced Lineup(st表)
- [学习][poj3264]稀疏表(ST表) Balanced Lineup
- POJ3264 Balanced Lineup 线段树|ST表
- poj3264 Balanced Lineup(RMQ +st)
- POJ3264 Balanced Lineup (RMQ & ST)
- POJ3264 Balanced Lineup(RMQ)
- [POJ 3264] Balanced Lineup (ST表)
- poj3264——Balanced Lineup(ST算法及线段树操作)
- POJ3264 Balanced Lineup 线段树 RMQ ST算法应用
- Poj3264: Balanced Lineup—题解+st表解释
- RMQ (st表) Balanced Lineup
- Balanced Lineup(poj3264,线段树入门)
- POJ3264 Balanced Lineup(线段树入门)
- poj3264 Balanced Lineup(RMQ裸题)
- poj3264 Balanced Lineup(线段树orRMQ)
- poj3264(线段树) Balanced Lineup
- linux 之 基础知识
- leetcode 121. Best Time to Buy and Sell Stock
- 王爽《汇编语言》实验17——编写包含多个功能子程序的中断例程
- http和socket协议应用场合总结
- A Bug which is not a std::vector bug
- poj3264 Balanced Lineup(ST表)
- leetcode 21. Merge Two Sorted Lists
- android中对于枚举的自定义实现
- Windows系统SNMP数据监测与OID
- NYOJ 663 弟弟的作业【简单题更能体现水平。。。】
- Linux入门
- 持续不停的走
- InnoDB索引实现
- POJ 1789(最小生成树)