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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 如果被乌龟咬了怎么办 宝宝被乌龟咬了怎么办 上高中了偏文怎么办 上高中了很烦该怎么办 螳螂生完孩子后怎么办 小区门禁卡丢了怎么办 开门感应卡坏了怎么办 我的螃蟹生卵了怎么办 剑三账号被冻结怎么办 疤痕留下的红印怎么办 马桶刷子沾屎了怎么办 马桶上水管堵了怎么办 孕妇吃了姑娘果怎么办 出差被领导睡了怎么办 智融财富 跑路了怎么办 秒钱要是跑路了怎么办 新买的皮衣皱了怎么办 话说多了伤元气怎么办 话说多了嗓子哑怎么办 桂附地黄丸上火怎么办 乐视倒闭了会员怎么办 汽车上沾了水泥怎么办 汽车上的水泥点怎么办 小米4c启动不了怎么办 被骗取验证码后怎么办 电脑深度睡眠了唤醒不了怎么办 树脂镜片磨花了怎么办 详情页跳出率高怎么办 u盘拒绝访问怎么办win7 u盘洗了拒绝访问怎么办 u盘拒绝访问怎么办xp u盘被拒绝访问怎么办 ⅹp系统经常假死怎么办 公司末位淘汰制,怎么办 梦三国2掉帧怎么办 玩英雄联盟掉帧怎么办 自酿红酒酸了怎么办 自酿葡萄酒不甜怎么办 酿的葡萄酒酸了怎么办 自酿葡萄酒过甜怎么办? 做的葡萄酒太甜怎么办