POJ 3264 Balanced Lineup -- RMQ或线段树
一段区间的最值问题,用线段树或RMQ皆可。两种代码都贴上:又是空间换时间。。
RMQ 解法:(8168KB 1625ms)
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <cstdlib>
- using namespace std;
- #define N 50003
- int a[N],dmin[N][],dmax[N][],n;
- void RMQ_init()
- {
- int i,j;
- for(i=;i<=n;i++)
- dmin[i][] = dmax[i][] = a[i];
- for(j=;(<<j)<=n;j++)
- {
- for(i=;i+(<<j)-<=n;i++)
- {
- dmin[i][j] = min(dmin[i][j-],dmin[i+(<<(j-))][j-]);
- dmax[i][j] = max(dmax[i][j-],dmax[i+(<<(j-))][j-]);
- }
- }
- }
- int RMQ(int l,int r)
- {
- int k = ;
- while((<<(k+)) <= r-l+)
- k++;
- return max(dmax[l][k],dmax[r-(<<k)+][k]) - min(dmin[l][k],dmin[r-(<<k)+][k]);
- }
- int main()
- {
- int q,i;
- while(scanf("%d%d",&n,&q)!=EOF)
- {
- for(i=;i<=n;i++)
- scanf("%d",&a[i]);
- RMQ_init();
- while(q--)
- {
- int l,r;
- scanf("%d%d",&l,&r);
- if(l>r)
- swap(l,r);
- printf("%d\n",RMQ(l,r));
- }
- }
- return ;
- }
线段树解法:(1172KB 2297ms)
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <algorithm>
- #include <cstdlib>
- using namespace std;
- #define N 50003
- struct node
- {
- int maxi,mini;
- }tree[*N];
- void pushup(int rt)
- {
- tree[rt].maxi = max(tree[*rt].maxi,tree[*rt+].maxi);
- tree[rt].mini = min(tree[*rt].mini,tree[*rt+].mini);
- }
- void build(int l,int r,int rt)
- {
- if(l == r)
- {
- scanf("%d",&tree[rt].maxi);
- tree[rt].mini = tree[rt].maxi;
- return;
- }
- int mid = (l+r)/;
- build(l,mid,*rt);
- build(mid+,r,*rt+);
- pushup(rt);
- }
- int query_max(int l,int r,int aa,int bb,int rt)
- {
- if(aa>r || bb<l)
- return -;
- if(aa<=l && bb>=r)
- return tree[rt].maxi;
- int mid = (l+r)/;
- return max(query_max(l,mid,aa,bb,*rt),query_max(mid+,r,aa,bb,*rt+));
- }
- int query_min(int l,int r,int aa,int bb,int rt)
- {
- if(aa>r || bb<l)
- return ;
- if(aa<=l && bb>=r)
- return tree[rt].mini;
- int mid = (l+r)/;
- return min(query_min(l,mid,aa,bb,*rt),query_min(mid+,r,aa,bb,*rt+));
- }
- int main()
- {
- int n,q,i;
- while(scanf("%d%d",&n,&q)!=EOF)
- {
- build(,n,);
- for(i=;i<=q;i++)
- {
- int l,r;
- scanf("%d%d",&l,&r);
- if(l>r)
- swap(l,r);
- printf("%d\n",query_max(,n,l,r,)-query_min(,n,l,r,));
- }
- }
- return ;
- }
POJ 3264 Balanced Lineup -- RMQ或线段树的更多相关文章
- POJ - 3264——Balanced Lineup(入门线段树)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 68466 Accepted: 31752 ...
- POJ 3264 Balanced Lineup(zkw线段树)
[题目链接] http://poj.org/problem?id=3264 [题目大意] 求区间最大值和最小值的差值 [题解] 线段树维护区间极值即可 [代码] #include <cstdio ...
- Poj 3264 Balanced Lineup RMQ模板
题目链接: Poj 3264 Balanced Lineup 题目描述: 给出一个n个数的序列,有q个查询,每次查询区间[l, r]内的最大值与最小值的绝对值. 解题思路: 很模板的RMQ模板题,在这 ...
- poj 3264 Balanced Lineup (RMQ)
/******************************************************* 题目: Balanced Lineup(poj 3264) 链接: http://po ...
- POJ - 3264 Balanced Lineup (RMQ问题求区间最值)
RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j<=n),返回数列A中下标在i,j里的最小(大)值,也就 ...
- poj 3264 Balanced Lineup (RMQ算法 模板题)
RMQ支持操作: Query(L, R): 计算Min{a[L],a[L+1], a[R]}. 预处理时间是O(nlogn), 查询只需 O(1). RMQ问题 用于求给定区间内的最大值/最小值问题 ...
- POJ 3264 Balanced Lineup RMQ ST算法
题意:有n头牛,编号从1到n,每头牛的身高已知.现有q次询问,每次询问给出a,b两个数.要求给出编号在a与b之间牛身高的最大值与最小值之差. 思路:标准的RMQ问题. RMQ问题是求给定区间内的最值问 ...
- POJ 3264 Balanced Lineup 【ST表 静态RMQ】
传送门:http://poj.org/problem?id=3264 Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total S ...
- poj 3264 Balanced Lineup(线段树、RMQ)
题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...
随机推荐
- DigitalOcean上SSH Key的创建(附DigitalOcean邀请)
DigitalOcean是一家云主机商家,最低配置512M内存,20G的SSD,每月只有5刀.半个月前刚刚在这上面买了一个VPS,创建Droplet的时候看见创建SSH Key的时候就有点懵,不知道这 ...
- css导航栏
几个导航栏也算对学过知识的回顾,总有新的收获,下面是学习过程中敲的代码: <!DOCTYPE HTML> <html> <head> <title>&l ...
- andriod arcgis加载影像TIF
private static final String TAG = "MainActivity"; private MapView mapView = null; @Overrid ...
- 【读书笔记】iOS-本地文件和数据安全注意事项
一,程序文件的安全. 可通过将JavaScript源码时行混淆和加密,防止黑客轻易地阅读和篡改相关的逻辑,也可以防止自己的Web端与Native端的通讯协议泄露. 二,本地数据安全. 对于本地的重要数 ...
- 解压缩框架--SSZipArchive
下载地址:https://github.com/ZipArchive/ZipArchive 如果你直接将框架文件夹拖入项目,构建时会出现以下错误 解决方案: 点击+以后会弹出 如果使用cocoaPod ...
- iOS开发基础框架
---恢复内容开始--- //appdelegate //// AppDelegate.m// iOS开发架构//// Copyright © 2016年 Chason. All rights ...
- android 音乐播放器简单实现
package com.zhangbz.musicplayer; import java.io.File; import android.app.Activity; import android.me ...
- XCode升级到7后,规范注释生成器VVDocumenter插件没有用了,怎么办?
Xcode更新到7之后,发现很多插件包括规范注释生成器VVDocumenter的插件都没法用了,找遍百度都没有找到成功解决这个问题的方法,然后我突发奇想,把注释也弄进代码模板里.虽然没有插件那样灵活: ...
- IOS-Swift、Objective-C、C++混合编程
1.Objective-C调用C++代码 后缀为m文件的是Objective-C的执行文件,而后缀为mm文件的是Objective-C++文件. 直接在Objective-C中是无法调用C++代码的, ...
- java集合 之 Collection和Iterator接口
Collection是List,Queue和Set接口的父接口,该接口里定义的方法即可用于操作Set集合,也可以用于List和Queue集合.Collection接口里定义了如下操作元素的方法. bo ...