POJ3264Balanced Lineup(最基础的线段树)
採用一维数组建树。
(由于一维数组建的是全然二叉树,时间上比用孩子节点指针建树慢。只是基本能够忽略=-=)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int INF = 0xffffff0;
int minV=INF;
int maxV=-INF;
struct Node
{
int L,R;
int minV,maxV;
int Mid()
{
return (L+R)/2;
}
};
Node tree[800010]; 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(2*root+1,L,(L+R)/2);
BuildTree(2*root+2,1+(L+R)/2,R);
}
} void Insert(int root, int i,int v)
{
if(tree[root].L==tree[root].R)
{
tree[root].maxV=tree[root].minV=v;
return;
}
tree[root].minV=min(tree[root].minV,v);
tree[root].maxV=max(tree[root].maxV,v);
if(i<=tree[root].Mid())
{
Insert(2*root+1,i,v);
}
else
{
Insert(2*root+2,i,v);
}
} void Query(int root,int s,int e)
{
if(tree[root].minV>=minV&&tree[root].maxV<=maxV)
{
return;
}
if(tree[root].L==s&&tree[root].R==e)
{
minV=min(tree[root].minV,minV);
maxV=max(tree[root].maxV,maxV);
return;
}
if(e<=tree[root].Mid())
{
Query(1+root*2,s,e);
}
else if(s>tree[root].Mid())
{
Query(2+root*2,s,e);
}
else
{
Query(2*root+1,s,tree[root].Mid());
Query(2*root+2,tree[root].Mid()+1,e);
}
} int main()
{
int n,q,h;
int i;
//freopen("d:\\test.txt","r",stdin);
scanf("%d%d",&n,&q);
BuildTree(0,1,n);
for( i= 1; i <= n; i++ )
{
scanf("%d",&h);
Insert(0,i,h);
}
for( i= 0; i < q; i++ )
{
int s,e;
scanf("%d%d", &s,&e);
minV= INF;
maxV= -INF;
Query(0,s,e);
printf("%d\n",maxV-minV);
}
return 0;
}
POJ3264Balanced Lineup(最基础的线段树)的更多相关文章
- Balanced Lineup(最简单的线段树题目)
Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 33389 Accepted: 15665 Case Time Limit ...
- 线段树 Interval Tree
一.线段树 线段树既是线段也是树,并且是一棵二叉树,每个结点是一条线段,每条线段的左右儿子线段分别是该线段的左半和右半区间,递归定义之后就是一棵线段树. 例题:给定N条线段,{[2, 5], [4, ...
- HDU-------(2795)Billboard(线段树区间更新)
Billboard Time Limit: 20000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- HDU1166 敌兵布阵(线段树)
C国的死对头A国这段时间正在进行军事演习,所以C国间谍头子Derek和他手下Tidy又开始忙乎了.A国在海岸线沿直线布置了N个工兵营地,Derek和Tidy的任务就是要监视这些工兵营地的活动情况.由于 ...
- [转载]完全版线段树 by notonlysuccess大牛
原文出处:http://www.notonlysuccess.com/ (好像现在这个博客已经挂掉了,在网上找到的全部都是转载) 今天在清北学堂听课,听到了一些很令人吃惊的消息.至于这消息具体是啥,等 ...
- 【转】线段树完全版~by NotOnlySuccess
线段树完全版 ~by NotOnlySuccess 很早前写的那篇线段树专辑至今一直是本博客阅读点击量最大的一片文章,当时觉得挺自豪的,还去pku打广告,但是现在我自己都不太好意思去看那篇文章了,觉 ...
- 【原创】线段树query模板对比! 新手线段树的一个容易出错的问题!!因为我就糊涂了一整天.......
我们解决问题的最好方法就是拿实例来举例子 我们来看tyvj1038或计蒜客 “管家的忠诚” 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管 ...
- hdu 3397 Sequence operation (线段树 区间合并 多重标记)
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3397 题意: 给你一串01串,有5种操作 0. 区间全部变为0 1.区间全部变为1 2.区间异或 3.询问 ...
- 线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel
题面:P2894 [USACO08FEB]酒店Hotel 题解:和基础的线段树操作差别不是很大,就是在传统的线段树基础上多维护一段区间最长的合法前驱(h_),最长合法后驱(t_),一段中最长的合法区间 ...
随机推荐
- 有n个整数,使其前面各数顺序向后移n-m个位置,最后m个数变成最前面的m个数
题目:有n个整数,使其前面各数顺序向后移n-m个位置,最后m个数变成最前面的m个数 public class 第三十六题数组向后移m个位置 { public static void main(Stri ...
- Ubuntu下压缩与解压各种文件的命令
1.压缩与解压xz文件 (1)压缩 xz -z filename (2)解压 xz -d filename.xz 2.压缩与解压tar文件 (1)压缩 tar -cvf filename(压缩到 ...
- js事件 (包含call()方法使用特点)
1.焦点事件 获取焦点事件onfocus\失去焦点事件onblur 例: oText.onfocus=function(){} 焦点:使浏览器能够区分用户输入的对象,当一个元素有焦点的时候,那么它就可 ...
- POJ 1949 Chores(DAG上的最长路 , DP)
题意: 给定n项任务, 每项任务的完成用时t和完成每项任务前需要的k项任务, 求把所有任务完成的最短时间,有当前时间多项任务都可完成, 那么可以同时进行. 分析: 这题关键就是每项任务都会有先决条件, ...
- 算法导论 第八章 线性时间排序(python)
比较排序:各元素的次序依赖于它们之间的比较{插入排序O(n**2) 归并排序O(nlgn) 堆排序O(nlgn)快速排序O(n**2)平均O(nlgn)} 本章主要介绍几个线性时间排序:(运算排序非比 ...
- SpringMVC修改功能
articleList.jsp <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" ...
- Oracle获取最近执行的SQL语句
注意:不是每次执行的语句都会记录(如果执行的语句是能在该表找到的则ORACLE不会再次记录,就是说本次执行的语句和上次或者说以前的语句一模一样则下面语句就查不出来的): select last_loa ...
- $config['base_url'] BASE_URL
/*|------------------------------------------------| Base Site URL|--------------------------------- ...
- CSU1350 To Add which?
题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1350 这题目因为每一个数都跟相邻的数有关,所以可以从左到右和从右到左一次扫一遍即可 代 ...
- mysql查所有列名
查询该视图 information_schema.columns 该有的都有 desc information_schema.columns; select * from information_ ...