HDU 3264 区间内的最大最小之差
题目链接:http://poj.org/problem?id=3264
题目大意:
在给定一堆牛的数量以及其高度的时候,每次给定一段区间,求这个区间内最高的牛和最矮的牛的高度之差为多少。
可以直接利用RMQ求出区间最大最小相减即可,一道模板题- -。
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
#define N 50010 int maxn[N][] , minn[N][] , n , q , val[N]; void RMQ()
{
memset(maxn , , sizeof(maxn));
memset(minn , 0x3f , sizeof(minn));
for(int i= ; i<=n ; i++) maxn[i][] = minn[i][] = val[i];
for(int i= , j= ; j<=n ; i++ , j<<=){
for(int k= ; k+j-<=n ; k++){
int la = k+(j>>);
maxn[k][i] = max(maxn[k][i-] , maxn[la][i-]);
minn[k][i] = min(minn[k][i-] , minn[la][i-]);
}
}
} int query(int s , int t)
{
int del = t-s+;
int j = (int)(log10(del)/log10())+;
int la = t-(<<(j-))+;
return max(maxn[s][j-] , maxn[la][j-])-min(minn[s][j-] , minn[la][j-]);
} int main()
{
// freopen("in.txt" , "r" , stdin);
while(~scanf("%d%d" , &n , &q))
{
for(int i= ; i<=n ; i++) scanf("%d" , &val[i]);
RMQ();
while(q--){
int s , t;
scanf("%d%d" , &s , &t);
printf("%d\n" , query(s , t));
}
}
return ;
}
RMQ
这道题目用线段树能快速的求解,因为此处不涉及更新,所以无需写update函数
不同于之前只定义一个tree数组,这回我们需要定义一个Max和一个Min数组分别子弟想存放较大和较小值
通过query找到区间内的最大值q,和最小值p,那么q-p便是我们所求的
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; #define N 50005
#define INF 0x3f3f3f3f int height[N],Min[*N],Max[*N],D; int query(int a,int b)
{
int i=D+a-,j=b+D+;
int p=INF,q=;
//if(a==b){return 0;}
for(;i^j^;i>>=,j>>=){
if(~i&){
p=min(p,Min[i^]);
q=max(q,Max[i^]);
}
if(j&){
p=min(p,Min[j^]);
q=max(q,Max[j^]);
}
}
return q-p;
}
int main()
{
int n,Q,a,b;
while(scanf("%d%d",&n,&Q)!=EOF){
memset(Min,,sizeof(Min));
memset(Max,0x3f,sizeof(Max));
for(D=;D<n+;D<<=);
for(int i=;i<=n;i++){
scanf("%d",&height[i]);
Min[D+i]=Max[D+i]=height[i];
}
for(int i=D-;i>=;i--){
Min[i]=min(Min[i<<],Min[i<<|]);
Max[i]=max(Max[i<<],Max[i<<|]);
}
for(int i=;i<=Q;i++){
scanf("%d%d",&a,&b);
printf("%d\n",query(a,b));
}
}
return ;
}
HDU 3264 区间内的最大最小之差的更多相关文章
- POJ-3264-Balanced Lineup-线段树模板题-查询区间内最大值和最小值之差
For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...
- hdu 3473 区间条件极值 - 区间 差的绝对值 之和的最小
题目传送门//res tp hdu 目的 对长度为n的区间,给定q个子区间,求一x,使得区间内所有元素与x的差的绝对值之和最小. 多测. n 1e5 q 1e5 ai [1,1e9] (i∈[1,n] ...
- HDU 4417 Super Mario(主席树求区间内的区间查询+离散化)
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- hdu 4630 查询[L,R]区间内任意两个数的最大公约数
No Pain No Game Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 4638 树状数组 区间内连续区间的个数(尽可能长)
Group Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU 3709 Balanced Number 求区间内的满足是否平衡的数量 (数位dp)
平衡数的定义是指,以某位作为支点,此位的左面(数字 * 距离)之和 与右边相等,距离是指某位到支点的距离; 题意:求区间内满足平衡数的数量 : 分析:很好这又是常见的数位dp , 不过不同的是我们这次 ...
- hdu 5023(线段树区间染色,统计区间内颜色个数)
题目描述:区间染色问题,统计给定区间内有多少种颜色? 线段树模板的核心是对标记的处理 可以记下沿途经过的标记,到达目的节点之后一块算,也可以更新的时候直接更新到每一个节点 Lazy操作减少修改的次数( ...
- hdu 4283 区间dp
You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- hdu3437 划分树 区间内小于第K大的值得和
Minimum Sum Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
随机推荐
- mysql数据误删除(drop)的恢复. (ext3grep, extundelete)
drop table tbl_name 物理删除.没有备份,没有二进制日志 在系统删除文件并非在存储中抹去数据,而仅仅是标识对应的block块可以被重新的分配使用.所以数据的恢复还是有希望的.但是那些 ...
- 使用ant build build.xml报“includeantruntime was not set”警告及"Class not found: javac1.8"问题
问题1:ant编译build.xml报“includeantruntime was not set”警告. 警告详情: warning: 'includeantruntime' was not set ...
- SQL中的SELECT_简单查询语句总结
--以scott用户下的dept和emp表为例 --注意:如果scott用户不能使用,请使用system用户登录--解锁scott用户ALTER USER SCOTT ACCOUNT UNLOCK;- ...
- Android里的 ART、JIT、AOT、Dalvik之间有什么关系?
ART.JIT.AOT.Dalvik之间有什么关系? JIT与Dalvik JIT是"Just In Time Compiler"的缩写,就是"即时编译技术", ...
- Ubuntu16下查看CPU、内存和磁盘相关信息
1.内存 查看内存#free -m total used free shared buff/cache available Mem: Swap: 2.CPU 查看逻辑cpu个数: #cat /proc ...
- Kali 2017.3开启VNC远程桌面登录
通过启用屏幕共享来开启远程桌面登录,开启后需要关闭encryption,否则会出现无法连接的情况.关闭encryption可以使用系统配置工具dconf来完成.所以先安装dconf-editor. 更 ...
- SEO 第七章
SEO第七章 网站网址链接 路径优化 网站的网址路径分为相对路径和绝对路径 绝对路径:绝对路径是完整的路径,不仅可以在站内打开,去其他地方依然可以打开. 相对路径:不是一个完整的路径,这种路径只能在站 ...
- Django 路由 —— Djangon如何处理一个请求
Django URL路由概述 一个干净优雅的URL方案是高质量Web应用程序中的一个重要细则Django可以让你设计URL,无论你想要什么,没有框剪限制要为应用程序设计URL,您可以非正式地创建一个名 ...
- JS的本地保存localStorage、sessionStorage用法总结
localStorage 生命周期是永久的 这意味着除非用户显示在浏览器提供的UI上清除localStorage信息,否则这些信息将永远存在. sessionStorage 生命周期为当前窗口或标签 ...
- DP || HYSBZ 1207 打鼹鼠
n*n的网格,有m个鼹鼠,t时间会有一只鼹鼠出现在(x,y)点处,如果机器人也在这个点就可以打到鼹鼠 机器人初始位置任意,每秒可以移动一格,问最多打到多少鼹鼠 *解法:f[i]表示前i只鼹鼠打了多少个 ...