本文出自:http://blog.csdn.net/svitter

题意:在1~200,000个数中。取一段区间。然后在区间中找出最大的数和最小的数字。求这两个数字的差。

分析:按区间取值,非常明显使用的线段树。

区间大小取200000 * 4 = 8 * 10 ^5;

进行查询的时候。注意直接推断l, r 与mid的关系就可以。一開始写的时候直接与tree[root].L推断,多余了,

逻辑不对。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>using namespace std;
const int INF = 0xffffff;
int maxV, minV;struct Node
{int L, R;int Mid(){ return (L+R)/2;}int maxV, minV;     //最大数和最小数//Node *lchild, *rchild;    使用一位数组就能够不使用,能够看做全然二叉树(可能存在空间浪费)
};Node tree[800010];           //四倍叶子节点void Insert(int root, int n, int val)
{//推断叶子节点if(tree[root].L == tree[root].R){tree[root].maxV = tree[root].minV = val;return;}//递归更新tree[root].minV = min(tree[root].minV, val);tree[root].maxV = max(tree[root].maxV, val);//当前为区间节点,寻找叶子节点if(n < tree[root].Mid()){Insert(root*2+1, n, val);}else{Insert(root*2+2, n, val);}
}void BuildTree(int root, int l, int r)
{//建立当前节点tree[root].L = l;tree[root].R = r;tree[root].maxV = -INF;tree[root].minV = INF;//递归调用建立子树if(l != r){BuildTree(root*2+1, l, (l+r)/2);BuildTree(root*2+2, (l+r)/2+1, r);}}void Query(int root, int l, int r)
{//递归终止条件if(l < tree[root].L || r > tree[root].R)return;//推断条件:全然符合区间if(l == tree[root].L && r == tree[root].R){maxV = max(maxV, tree[root].maxV);minV = min(minV, tree[root].minV);return;}if(r <= tree[root].Mid())Query(root*2+1, l, r);else if(l > tree[root].Mid())Query(root*2+2, l, r);else{Query(root*2+1, l, tree[root].Mid());Query(root*2+2, tree[root].Mid()+1, r);}
}int main()
{int N, Q;int val;int a, b;         //查找区间[a,b]//while(scanf("%d%d", &N, &Q))scanf("%d%d", &N, &Q);{BuildTree(0, 1, N);for(int i = 0; i < N; i ++){scanf("%d", &val);Insert(0, i, val);}//用于測试线段树生成情况
//        for(int i = 0; i < 7; i++)
//        {
//            printf("No:%d,\nL: %d,\nR: %d,\nMAX: %d,\nMIN: %d,\n\n", i, tree[i].L, tree[i].R, tree[i].maxV, tree[i].minV);
//        }while(Q--){maxV = -INF, minV = INF;scanf("%d%d", &a, &b);Query(0, a, b);
//            printf("max: %d\nmin: %d\n", maxV, minV);printf("%d\n", maxV - minV);}}return 0;
}

POJ3264——Balanced Lineup(线段树)相关推荐

  1. POJ3264 Balanced Lineup【线段树】

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 63040   Accepted: 29405 ...

  2. poj3264 - Balanced Lineup(RMQ_ST)

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 45243   Accepted: 21240 ...

  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. 【POJ3264】Balanced Lineup,线段树入门

    Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Case Time Limit: 2000MS Description For the ...

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

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

  6. POJ 3264 Balanced Lineup 【线段树】

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

  7. Poj 3246 Balanced Lineup(线段树基础)

    依旧是线段树基础题 询问区间的最大值和最小值之差,只有询问,没有插入删除.继续理解基础线段树 #include <iostream> #include <algorithm> ...

  8. bzoj 1699: [Usaco2007 Jan]Balanced Lineup排队【st表||线段树】

    要求区间取min和max,可以用st表或线段树维护 st表 #include<iostream> #include<cstdio> using namespace std; c ...

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

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

最新文章

  1. input文本框设置移除默认内容(兼容IE低版本)
  2. 《Spring 3.0就这么简单》——1.6 展现层
  3. 【Breadth-first Search 】515. Find Largest Value in Each Tree Row
  4. 跳台阶游戏(洛谷P5613题题解,Java语言描述)
  5. 重要的气质-个性决定命运
  6. 关于单片机大循环结构编程
  7. 11.并发编程--同步类容器和并发类容器
  8. 数字孪生:第三人称鼠标操作
  9. python回车和换行的区别_换行\ n与回车\ r的区别
  10. Scheme语言 入门语法
  11. asterisk cdr mysql_在asterisk中添加CDR sqlite支持
  12. 牛客 | C 选择颜色
  13. 计算机打印机密码怎么设置,如何设置电脑开机密码(电脑如何安装打印机)
  14. Css margin和pandding的上下左右
  15. Graylog之Grok解析
  16. 拒绝尬吹!海盗船键盘K100告诉你什么才是机械键盘天花板!
  17. springboot常见错误及其解决方式
  18. mysql实现vpd_MySQL支持类似Oracle的VPD特性吗
  19. imagemagick c++ 图片处理2
  20. 小程序填写银行卡号 输入4位自动加入空格符

热门文章

  1. 在 ASP.NET Web 部件应用程序中使用服务器控件
  2. 大数据_Flink_数据处理_运行时架构5_slot和任务调度---Flink工作笔记0020
  3. 大数据_Flink_数据处理_yarn和k8s平台的flink部署---Flink工作笔记0015
  4. 大数据之-Hadoop3.x_MapReduce_outputformat案例需求分析---大数据之hadoop3.x工作笔记0121
  5. STM32工作笔记0077---UCOSIII中使用串口发送数据要注意的点
  6. IOS工作笔记003---windows给VmWare虚拟机OS系统安装xcode
  7. large_margin
  8. 【Caffe】训练ImageNet模型
  9. bz 1029: [JSOI2007]建筑抢修
  10. ospf配置方法及相关问题