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 ...
随机推荐
- 基于webmagic的爬虫小应用
以前没有写过爬虫程序,最近两天就研究了一下java的爬虫框架webmagic.然后写了一个demo 写爬虫的基本思想: 1.抓取目标连接 2.根据页面中标签,抓捕你需要的内容 3.保存结果集 以下是实 ...
- mongoDB内置文档定义
在最近的设计数据库时,犯了一个低级的错误,就是设置内置文档是定义了错误了,导致数据取不出,去找了很多资料都无法解决.最后看了一了一下自己设置的model文件.配置错误,所以导致数据取不出了. 数据库时 ...
- sass+compass起步
前言:Sass is an extension of CSS that adds power and elegance to the basic language. It allows you to ...
- phpcms v9模板制作教程
phpcms v9模板制作教程(转载) 第一节 1.首先下载phpcms v9的集成安装包并安装,这里就不详细说明了. 2.本地调试建议大家使用APMserver,或者wampserver等,可以到P ...
- canvas画饼图
<style> body { background: black; text-align: center; } #cans { background: white; } ...
- 【js】js导出表格到excel
js: function method(tableid) //读取表格中每个单元到EXCEL中 { var curTbl = document.getElementById(tableid); var ...
- Quartz使用二 通过属性传递数据
上一篇介绍了通过context.getJobDetail().getJobDataMap()方式获取传递的数据,其实可以通过定义属性来传递参数 package org.tonny.quartz; im ...
- 初用emmet
下载emmet的pspad插件emmet.js.复制到pspad目录下的 script\JScript 文件夹. 输入 ul#nav>li.item$*4>{Item $} 但是没反应. ...
- 浅析 innerHTML 性能优化的原理
浅析 innerHTML 性能优化的原理 博客分类: web前端 IEAndroidwebkit浏览器UI 昨天看了 lveyo老兄的"innerHTML的性能问题" 一文 ht ...
- Mysql无法启动服务解决办法
只需要输入:mysqld --initialize 进行初始化,即可启动