POJ - 3264 线段树模板题 询问区间最大最小值
这是线段树的一个模板题,给出一串数字,然后询问区间的最大最小值。
这个其实很好办,只需把线段树的节点给出两个权值,一个是区间的最小值,一个是区间的最大值,初始化为负无穷和正无穷,然后通过不断地输入节点,不断维护,最好每次询问维护一个询问区间的最大值和最小值,最后相减即可。其实就相当于,线段树找区间的最大值和最小值。
- #include<iostream>
- #include<stdio.h>
- #include<algorithm>
- #include<string.h>
- #define INF 0x3f3f3f3f
- using namespace std;
- int minv=INF;
- int maxv=-INF;
- struct node{
- int l,r;
- int minv,maxv;
- int mid()//中间值
- {
- return (l+r)/;
- }
- }tree[];
- void buildtree(int root,int l,int r)
- {
- tree[root].l=l;//区间左边
- tree[root].r=r;//区间右边
- tree[root].minv=INF;//区间内部的最小值
- tree[root].maxv=-INF;//区间内部的最大值
- if(l!=r)//不是根节点
- {
- buildtree(root*+,l,(l+r)/);
- buildtree(root*+,(l+r)/+,r);
- }
- }
- void insert(int root,int i,int v){//单点修改
- if (tree[root].l==tree[root].r)
- {
- tree[root].r=i;
- tree[root].minv=tree[root].maxv=v;
- return;
- }
- tree[root].minv=min(tree[root].minv,v);//不是根节点,那么当插入的数不断往下更新时,需要不断对树上的节点范围内的最大值和最小值进行更新
- tree[root].maxv=max(tree[root].maxv,v);
- if(i<=tree[root].mid())
- insert(*root+,i,v);
- else
- insert(*root+,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(minv,tree[root].minv);
- maxv=max(maxv,tree[root].maxv);
- return;
- }
- if(e<=tree[root].mid())//如过给出询问的区间不能通过一分为二分开,仍在区间的左边
- query(*root+,s,e);//仍然继续递归这个区间
- else if (s>tree[root].mid())
- query(*root+,s,e);//反之也继续递归这个区间
- else//需要把区间分开
- {
- query(*root+,s,tree[root].mid());//对半分
- query(*root+,tree[root].mid()+,e);
- }
- }
- int main(){
- int n,q,h;
- scanf("%d%d",&n,&q);
- buildtree(,,n);
- for (int i=;i<=n;i++){
- scanf("%d",&h);
- insert(,i,h);
- }
- for (int i=;i<q;i++)
- {
- int s,e;
- scanf("%d%d",&s,&e);
- minv=INF;
- maxv=-INF;
- query(,s,e);
- printf("%d\n",maxv-minv);
- }
- return ;
- }
POJ - 3264 线段树模板题 询问区间最大最小值的更多相关文章
- 洛谷3372线段树模板题 对区间+k或者查询区间和
#include<bits/stdc++.h> using namespace std; typedef unsigned int ui; typedef long long ll; ty ...
- poj 3468 线段树模板题
#include<iostream> #include<algorithm> #include<stdio.h> using namespace std; #def ...
- HDU 1698 Just a Hook (线段树模板题-区间求和)
Just a Hook In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of t ...
- [POJ2104] 区间第k大数 [区间第k大数,可持久化线段树模板题]
可持久化线段树模板题. #include <iostream> #include <algorithm> #include <cstdio> #include &l ...
- [AHOI 2009] 维护序列(线段树模板题)
1798: [Ahoi2009]Seq 维护序列seq Time Limit: 30 Sec Memory Limit: 64 MB Description 老师交给小可可一个维护数列的任务,现在小 ...
- hdu1823(二维线段树模板题)
hdu1823 题意 单点更新,求二维区间最值. 分析 二维线段树模板题. 二维线段树实际上就是树套树,即每个结点都要再建一颗线段树,维护对应的信息. 一般一维线段树是切割某一可变区间直到满足所要查询 ...
- POJ 3468 线段树裸题
这些天一直在看线段树,因为临近期末,所以看得断断续续,弄得有些知识点没能理解得很透切,但我也知道不能钻牛角尖,所以配合着刷题来加深理解. 然后,这是线段树裸题,而且是最简单的区间增加与查询,我参考了A ...
- UESTC - 1057 秋实大哥与花 线段树模板题
http://acm.uestc.edu.cn/#/problem/show/1057 题意:给你n个数,q次操作,每次在l,r上加上x并输出此区间的sum 题解:线段树模板, #define _CR ...
- poj 3264 线段树 求区间最大最小值
Description For the daily milking, Farmer John's N cows (1 ≤ N ≤ 50,000) always line up in the same ...
随机推荐
- springmvc复习笔记----Restful 风格,PathVariable获取 Url实例
结构 包与之前相同 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...
- Spring MVC 静态资源处理 (三)
完整的项目案例: springmvc.zip 目录 实例 项目结构: 一.配置web.xml <?xml version="1.0" encoding="UTF-8 ...
- SQL Server 锁实验(重建索引)
昨晚某现场报一个重建索引失败的问题,远程查看后发现是自动收缩的内部会话引发的锁申请超时,突然想起来自己的加锁实验还没完成索引重建部分,今天有空正好做一下: USE [数据库名] GO ALTER IN ...
- sql developer以字段来删除大量数据
今天碰到一个问题,就是删除数据库数据,要删除了有1000一千条左右的数据,总共数据大概有30万条左右,但是如何删除呢, 我首先想到的是找数据的共性,因为这些数据日期都是3月份的,30万条数据时间段不相 ...
- Linux CFS调度器之pick_next_task_fair选择下一个被调度的进程--Linux进程的管理与调度(二十八)
1. CFS如何选择最合适的进程 每个调度器类sched_class都必须提供一个pick_next_task函数用以在就绪队列中选择一个最优的进程来等待调度, 而我们的CFS调度器类中, 选择下一个 ...
- Windows Server 2016-域站点链接及复制时间调整
本章简单为大家介绍如何新建域链接并调整复制计划.生产环境中很多情况下需要我们手工去创建站点复制链接,并根据实际带宽情况调整复制计划以减轻网络压力等.站点内部署多台域控制器,域控制器间的 复制链接建议通 ...
- 基数排序python实现
基数排序python实现 基数排序 基数排序(英语:Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较.由于整数也可以表达字符串(比如名字或 ...
- oracle USING 用法
提问 using(xx)中可以接多个列吗? using(xx)中的列可以接表名或别名吗? 在使用using的语句中,select * 可以使用吗? 如果表有别名t,select t.* from ta ...
- June 11. 2018 Week 24th, Monday
Love is the beauty of the soul. 爱是灵魂之美. From Saint Augustine. The complete version of this quote goe ...
- centos7下安装docker(23.docker-swarm之如何访问service)
如何访问service呢? 为了便于分析,我们重新部署web-server 1.删除service 执行命令docker service rm web-server docker service rm ...