本文出自: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 —— 线段树单点更新 区间最大最小值

    题目链接:https://vjudge.net/problem/POJ-3264 For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000 ...

  2. POJ3264 Balanced Lineup 线段树区间最大值 最小值

    Q个数 问区间最大值-区间最小值 // #pragma comment(linker, "/STACK:1024000000,1024000000") #include <i ...

  3. BZOJ-1699 Balanced Lineup 线段树区间最大差值

    Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 41548 Accepted: 19514 Cas ...

  4. [POJ] 3264 Balanced Lineup [线段树]

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 34306   Accepted: 16137 ...

  5. 【POJ】3264 Balanced Lineup ——线段树 区间最值

    Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 34140   Accepted: 16044 ...

  6. bzoj 1636: [Usaco2007 Jan]Balanced Lineup -- 线段树

    1636: [Usaco2007 Jan]Balanced Lineup Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 772  Solved: 560线 ...

  7. poj3264 Balanced Lineup(树状数组)

    题目传送门 Balanced Lineup Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 64655   Accepted: ...

  8. POJ 3264 Balanced Lineup 线段树 第三题

    Balanced Lineup Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line ...

  9. poj 3264 Balanced Lineup(线段树、RMQ)

    题目链接: http://poj.org/problem?id=3264 思路分析: 典型的区间统计问题,要求求出某段区间中的极值,可以使用线段树求解. 在线段树结点中存储区间中的最小值与最大值:查询 ...

  10. POJ 3264 Balanced Lineup (线段树)

    Balanced Lineup For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the s ...

随机推荐

  1. HTML元素的ID和Name属性的区别

    HTML元素的ID和Name属性的区别今天突然兴致来了,想深究下这两属性的具体区别最classical的答案:ID就像是一个人的身份证号码,而Name就像是他的名字,ID显然是唯一的,而Name是可以 ...

  2. CSS–Some Structure

    Some Structure About CSS Layout Position,Layer[层次] Box Model Visual Formatting Model BFC[block forma ...

  3. bmob云 实现注册和登录的功能

    向大家介绍一款我感觉非常溜的一款后端云服务bmob云 借助bmob云我们可以实现注册和登录页面的功能,下面就让我给大家演示一下借助bmob云服务实现这两个功能吧.  1. 用户是一个应用程序的核心.对 ...

  4. 移动端开发(四):swiper.js

    swiper.js中文网:http://www.swiper.com.cn/ 文档结构 swiper.jquery.js    是需要引用jquery.js 或者 zepto.js 时,只需直接引用该 ...

  5. pure学习笔记

    最近研究Pure,发现这个对于写css来说确实是个好的框架,特此总结了一番,如有错误或不足的地方,欢迎交流指点,轻拍. 此文运用的是优雅的Markdown而书 Pure学习笔记 #写在最前 1# Pu ...

  6. 一次搞懂 Assets Pipeline 转载自http://gogojimmy.net/2012/07/03/understand-assets-pipline/

    Assets Pipeline 是 Rails 3.1 一個重要的功能,一直並沒有很去了解其特性,但因為最近都在寫前端的東西在 assets pipeline 的東西上跌跌撞撞了不少次(尤其在 dep ...

  7. PhoneGap笔记-01 基本使用

    1. 环境配置 1.1 常用框架 jQuery Backbone.js dojo bootstrap kendo UI Sencha jQuery Mobile PhoneJS AngularJS I ...

  8. poj 3273 Monthly Expence 简单二分

    /** 大意: 有连续的n天,每一天有一定的花费,将其分成m份,每一份占一天或者连续的几天,求这m份中的最大值 思路: 二分其最大上限,看在此最大上线,能分成多少份,若大于m份,说明上限过小,需要扩大 ...

  9. 一种CentOS图形界面的修复方法

    刚跳槽来这个公司,第一个任务是一块PCIE8120卡的应用开发.尼玛,别人来培训过.演示过的,现在居然没一个人能把别人演示的东西演示给我看!只好自己折腾去了.把服务器搬到自己旁边空位方便折腾,结果发现 ...

  10. jQuery File Upload 插件 php代码分析

    jquery file upload php代码分析首先进入构造方法 __construct() 再进入 initialize()因为我是post方式传的数据  在进入initialize()中的po ...