依旧是线段树基础题

询问区间的最大值和最小值之差,只有询问,没有插入删除。继续理解基础线段树

#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <climits>//形如INT_MAX一类的
#define MAX 50005
#define INF 0x7FFFFFFF
#define REP(i,s,t) for(int i=(s);i<=(t);++i)
#define ll long long
#define mem(a,b) memset(a,b,sizeof(a))
#define mp(a,b) make_pair(a,b)
#define L(x) x<<1
#define R(x) x<<1|1
# define eps 1e-5
//#pragma comment(linker, "/STACK:36777216") ///传说中的外挂
using namespace std;
struct node
{int l,r,mid,max,min;
}tree[4*MAX];
int hei[MAX],a,b;
int maxx(int a,int b) {if(a > b) return a;return b;
}
int minn(int a,int b) {if(a < b) return a;return b;
}
void up(int num) {if(tree[num].max < tree[L(num)].max) tree[num].max = tree[L(num)].max;if(tree[num].max < tree[R(num)].max) tree[num].max = tree[R(num)].max;if(tree[num].min > tree[L(num)].min) tree[num].min = tree[L(num)].min;if(tree[num].min > tree[R(num)].min) tree[num].min = tree[R(num)].min;
}void build(int l,int r,int num) {tree[num].l = l;tree[num].r = r;tree[num].mid = (l + r) >> 1;tree[num].max = 0;tree[num].min = INF;if(l == r) {tree[num].max = hei[l];tree[num].min = hei[l];return ;}build(l,tree[num].mid ,L(num));build(tree[num].mid+1,r,R(num));up(num);
}void query(int l,int r,int num) {if(l <= tree[num].l && r >= tree[num].r) {a = maxx(a,tree[num].max);b = minn(b,tree[num].min);return ;}if(r <= tree[num].mid ) {query(l,r,L(num));}else if(l > tree[num].mid) {query(l,r,R(num));}else {query(l,tree[num].mid,L(num));query(tree[num].mid + 1,r,R(num));}
}void test(int n)
{for(int i=1; i<=2*n+1; i++){printf("l:%d r:%d max:%d min:%d\n",tree[i].l,tree[i].r,tree[i].max,tree[i].min);}
}int main() {int n,q,i;int l,r;cin >> n >> q;for(i=1; i<=n; i++) {scanf("%d",&hei[i]);}build(1,n,1);//test(n);for(i=1; i<=q; i++) {a = 0;b = INF;scanf("%d%d",&l,&r);query(l,r,1);printf("%d\n",a - b);}return 0;
}

转载于:https://www.cnblogs.com/dyllove98/p/3201117.html

Poj 3246 Balanced Lineup(线段树基础)相关推荐

  1. POJ 3264 Balanced Lineup

    POJ 3264 Balanced Lineup 题目链接 Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,00 ...

  2. POJ 3264 Balanced Lineup【线段树区间查询求最大值和最小值】

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53703   Accepted: 25237 ...

  3. poj 3264 Balanced Lineup RMQ问题 线段树

    For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same order. One d ...

  4. POJ 3264 Balanced Lineup 【线段树】

    Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 50004 Accepted: 23434 Cas ...

  5. POJ——3624 Balanced Lineup(线段树入门——区间最值问题)

    原题链接:http://poj.org/problem?id=3264 每天挤奶时,农夫John的N头奶牛(1≤N≤50,000头)总是按照相同的顺序排列.一天,农夫约翰决定和几头牛组织一场极限飞盘游 ...

  6. POJ 3264 Balanced Lineup

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 53629   Accepted: 25223 ...

  7. POJ 3667 Hotel(线段树)

    POJ 3667 Hotel 题目链接 题意:有n个房间,如今有两个操作 1.找到连续长度a的空房间.入住,要尽量靠左边,假设有输出最左边的房间标号,假设没有输出0 2.清空[a, a + b - 1 ...

  8. POJ 2828 Buy Tickets 线段树

    题目: http://poj.org/problem?id=2828 很巧妙的题,逆序插入线段树,这样元素不用移动.用二叉排序树也能过. 1 #include <stdio.h> 2 #i ...

  9. POJ 3264: Balanced Lineup

    2019独角兽企业重金招聘Python工程师标准>>> 题目在此 解题思路:查询区间最大值/最小值之差,最基础的线段树应用. 代码: #include <cstdio>/ ...

最新文章

  1. 怎样才能最短时、高效、踏实地学习3D视觉?
  2. 【robotframework】robotframework基本使用
  3. OpenCV直方图均衡Histogram Equalization
  4. kernel-devel
  5. sql2005备份还原详解
  6. mysql内置加密函数_MySQL数据库内置加密函数总结
  7. 并发编程的 15 条建议(译)
  8. java 关键字null
  9. html5新的dom函数,从0到1: 实现一个虚拟 DOM(上)
  10. 全网最详细的idea安装教程
  11. 还在用Json-lib?面对疾风吧!
  12. PS证件照更改背景颜色
  13. 聚合支付系统设计(三)
  14. LCD 触摸屏调试记录
  15. 201771010112罗松《面向对象程序设计(java)》第十一周学习总结
  16. 北邮计算机网络实践第四次实验,北邮计算机网络技术实践实验四实验报告.doc...
  17. Snipaste常用快捷键(详细总结)
  18. 2021年安全生产监管人员及安全生产监管人员模拟试题
  19. 有没有开源的虚拟路由器?有,VPP了解一下
  20. 美国AMC数学竞赛的含金量如何?

热门文章

  1. Linux cal日历指令
  2. Java并发编程--不要使用字符串常量作为synchronized锁对象
  3. elasticsearch集群配置文件详述
  4. origin安装包_作图技巧|研究生需要会的20个Origin操作,作图又快又好看(二)...
  5. Centos7安装tengine-2.3.2版本
  6. Qt IFW基本用法
  7. Qt for ios / Qt for Android 设置透明状态栏
  8. VHDL的数据对象(学习笔记1)
  9. 视图插入数据_数据库DQL、DML、DDL、DCL 详解
  10. 用 openssl 生成 SSL 使用的私钥和证书,并自己做 CA 签名