【POJ No. 3264】区间最值差 Balanced Lineup

news2024/12/22 20:29:11

【POJ No. 3264】区间最值差 Balanced Lineup

北大OJ 题目地址

在这里插入图片描述

其实这道题 之前也做过一次了

http://t.csdn.cn/0YZgC

在这里插入图片描述

不过上次是用ST 做的。这次换做 分块来实现。

【题意】

每天挤奶时,约翰的N 头奶牛(1≤N≤50,000)都以相同的顺序排队。他挑选一系列连续的奶牛来玩游戏。

为了让所有奶牛都玩得开心,它们的高度差异不应太大。约翰列出了Q组(1≤Q ≤200,000)奶牛和它们的高度(1≤height≤1,000,000)。他希望确定每个小组中最高和最矮的奶牛之间的高度差异。

【输入输出】

输入:

第1行包含两个整数N 和Q 。接下来N 行,每行都包含一个整数,表示奶牛的高度。最后Q 行,每行都包含两个整数A 和B (1≤A≤B ≤N ),代表从A 到B 的奶牛范围。

输出:

输出Q 行,每行都包含一个整数,表示该范围内最高和最矮奶牛的高度差。

【样例】

在这里插入图片描述

【思路分析】

这道题是典型的区间最值查询问题,可采用线段树、ST或分块解决。

【算法设计】

① 分块。划分块,记录每个元素所属的块,以及每一块的左右端点下标、最大值和最小值。

② 查询。查询[l , r ]区间最大值和最小值的差值。

  • 若该区间属于同一块,则暴力统计最大值和最小值,返回两者的差值。
  • 若该区间包含多个块,则统计中间每个块的最大值和最小值,然后暴力统计左端点和右端点的最大值和最小值,返回两者的差值。

【算法实现】

#include<cstdio>
#include<cstring>
#include<algorithm>//max,min
#include<cmath>//sqrt

using namespace std;

const int inf=0x3f3f3f3f;
const int maxn=50010;
int L[maxn],R[maxn],belong[maxn],block_max[maxn],block_min[maxn];
int a[maxn],n,m;

void build(){
    int t=sqrt(n*1.0);
    int num=n/t;
	if(n%num) num++;
    for(int i=1;i<=num;i++)
        L[i]=(i-1)*t+1,R[i]=i*t;
    R[num]=n;
    for(int i=1;i<=n;i++)
        belong[i]=(i-1)/t+1;
    for(int i=1;i<=num;i++){//求每块最值 
    	int MIN=inf,MAX=-inf;
    	for(int j=L[i];j<=R[i];j++){
        	MAX=max(MAX,a[j]);
			MIN=min(MIN,a[j]);		
		}
		block_max[i]=MAX;
		block_min[i]=MIN;	
	}
}

int query(int l,int r){
    int MIN=inf,MAX=-inf;
    if(belong[l]==belong[r]){
        for(int i=l;i<=r;i++){
        	MAX=max(MAX,a[i]);
			MIN=min(MIN,a[i]);	
		}
        return MAX-MIN;
    }
    else{
        for(int i=l;i<=R[belong[l]];i++){//左端
        	MAX=max(MAX,a[i]);
			MIN=min(MIN,a[i]);	
		}
        for(int i=belong[l]+1;i<belong[r];i++){//中间
        	MAX=max(MAX,block_max[i]);
			MIN=min(MIN,block_min[i]);	
		}
        for(int i=L[belong[r]];i<=r;i++){//右端
        	MAX=max(MAX,a[i]);
			MIN=min(MIN,a[i]);	
		}
    }
    return MAX-MIN;
}

int main(){
	
    int l,r;
	while(~scanf("%d%d",&n,&m)){
		for(int i=1;i<=n;i++)//下标从1开始 
			scanf("%d",&a[i]);
		build();
		for(int j=1;j<=m;j++){
			scanf("%d%d",&l,&r);
			printf("%d\n",query(l,r));
		}
	}
	
    return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59550.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络工程】7、实操-万达酒店综合项目(一)

接上篇《6、防火墙介绍及配置实操》 之前我们讲解了防火墙的基础知识以及相应的实操案例&#xff0c;本篇我们结合之前的交换机、路由器及防火墙的知识&#xff0c;进行一个酒店网络项目的实战。 本篇主要介绍一下酒店网络项目的整体需求文档。 一、项目背景 为规范万达美华…

tensorflow fashion_mnist数据集模型训练及预测

✨ 博客主页&#xff1a;小小马车夫的主页 ✨ 所属专栏&#xff1a;Tensorflow 文章目录前言一、环境二、fashion_mnist数据集介绍三、fashion_mnist数据集下载和展示四、数据预处理五、构建模型和训练模型六、模型预测总结前言 前面介绍mnist手写数字集训练&#xff0c;本文对…

自制肥鲨HDO2电源降压延长线,支持3S~6S动力电池

自制肥鲨HDO2电源降压延长线&#xff0c;支持3S~6S动力电池1. 问题源由2. 破题思路2.1 10元大钞搞定2.2 两个毛爷爷搞定3. 解决方案4. 最终延长线产出4.1 裸照4.2 成品5. 花絮1. 问题源由 源由&#xff1a; 电池盒电源线接触不良。 肥鲨眼镜的电源盒问题由来已久&#xff0c;…

SecureCRT隧道,跳板机+端口转发,内网穿透

背景 ServerA(Linux系统)&#xff1a; 内网&#xff1a;192.168.111.201 公网&#xff1a;10.121.8.88&#xff08;虚构的ip方便理解&#xff09; ServerB&#xff1a; 内网&#xff1a;192.168.111.202 本机&#xff1a; 安装有SecureCRT软件 注意上图中的箭头。箭头指向可…

Android动画——使用动画启动Activity

1、使用动画启动Activity概述 我们在Android开发应用时&#xff0c;会遇到一个页面跳转到另一个页面的情况&#xff0c;这时候我们如果使用动画过渡会使得页面更加的流畅。这是一个滑动式的进入和退出的动画可以看到Android的过渡动画可以在不同状态之间建立视觉联系。您可以为…

find 命令这 7 种高级用法

可以很肯定地说&#xff0c;find 命令是 Linux 后台开发人员必须熟知的操作之一&#xff0c;除非您使用的是 Windows Server。 对于技术面试&#xff0c;它也是一个热门话题。让我们看一道真题&#xff1a; 如果你的 Linux 服务器上有一个名为 logs 的目录&#xff0c;如何删…

MySQL性能调优——索引篇

MySQL为什么会选错索引 使用explain命令可以查看查询语句使用了具体使用了哪个索引&#xff0c;比如 explain select * from t where a between 10000 and 20000;查询结果如图所示。 选择索引是优化器的工作 优化器选择索引的目的是想找到一个最优的执行方案&#xff0c;并…

08_线程池

08_线程池前言Callable接口ThreadPoolExecutor**为什么用线程池****线程池的好处**架构说明创建线程池底层实现线程池的重要参数拒绝策略线程池底层工作原理问题二: 线程池使用过吗?谈谈在生产上如何设置的参数?线程池的拒绝策略你谈谈?工作中单一的/固定数的/可变数的三种创…

设计模式 之 行为型模式

设计模式 之 行为型模式 模式 & 描述包括行为型模式 这些设计模式特别关注对象之间的通信。责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 命令模式&#xff08;Command Pattern&#xff09;解释器模式&#xff08;Interpreter Pattern&#xff09;…

Web 性能指标

Web 性能指标 对于 Web 开发人员来说&#xff0c;如何衡量一个 Web 页面的性能一直是一个难题。 最初&#xff0c;我们使用 Time to First Byte、DomContentLoaded 和 Load 这些衡量文档加载进度的指标&#xff0c;但它们不能直接反应用户视觉体验。 为了能衡量用户视觉体验…

[附源码]计算机毕业设计springboot志愿者服务平台

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[数据结构]八大排序算法总结

作者&#xff1a; 华丞臧专栏&#xff1a;【数据结构】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。推荐一款刷题网站 &#x1f449; LeetCode刷题网站 目录 一、排序的概念及其运用 1.1排…

【目的:windows下VS2017/2022配置使用opengl - 初探-创建一个空窗口】

目的&#xff1a;windows下VS2017/2022配置使用opengl - 初探-创建一个空窗口 环境&#xff1a; 系统&#xff1a;Win10 环境&#xff1a;VS2017 64bit步骤&#xff1a; windows下visualstudio下使用opengl&#xff0c;搭建配置环境并测试窗口 1、opengl库&#xff0c;vs下自…

Crack:Open Inventor 10.12.1 Fixed Bugs List 10.12

10.12.0 - 10.12.1 Open Inventor 10.12.1 Core #OIV-4245 Shapes not rendered with MultipleInstancing  #OIV-4258 Transparency issue with SoPackedColor – CAS-41256-F0S4 OivSuite.Java #OIV-4273 Memory leak with RemoteViz Java and JVM VolumeViz #OI…

CMake中add_library的使用

CMake中的add_library命令用于使用指定的源文件向项目(project)中添加库&#xff0c;其格式如下&#xff1a; add_library(<name> [STATIC | SHARED | MODULE][EXCLUDE_FROM_ALL][<source>...]) # Normal Libraries add_library(<name> OBJECT [<source&…

【Java 快速复习】垃圾回收算法 垃圾回收器

快速理解 Java 垃圾回收算法 & 垃圾回收器 先说个关系概念&#xff0c;垃圾回收的算法是逻辑概念的定义&#xff0c;用于规范垃圾回收器实现方的一些行为&#xff0c;而垃圾回收器就是实现这些算法的工具&#xff0c;这些工具大概是一系列的 C 的类以及其实现的一些对应回…

Linux服务器上跑深度学习实验

原文地址&#xff1a;Linux上跑深度学习实验 目录远程连接环境搭建与服务器断开连接后代码停止之前一直使用Google Colab跑实验&#xff0c;因为实验的规模不大&#xff0c;配合Google Drive用起来就很舒服&#xff0c;但是最近要系统地进行实验&#xff0c;规模一下子上来了&a…

【Spring】一文带你搞懂Spring容器配置

前言 本文为大家介绍的是Spring容器配置相关知识&#xff0c;包含Bean和Configuration的使用&#xff0c;使用 AnnotationConfigApplicationContext实例化Spring容器&#xff0c;Bean注解的使用&#xff0c;Configuration的使用&#xff0c;Import 注解的使用&#xff0c;结合J…

C++中STL-set详解

目录 set/ multiset容器 1. set基本概念 2.set构造和赋值 3.set大小和交换 4.set插入和删除 5.set容器-查找和统计 6.set和multiset的区别 7.pair对组创建 8.set容器排序 9.set存放自定义数据类型 set/ multiset容器 1. set基本概念 简介: 所有元素都会在插入时自动…

使用Apisix打造家庭NAS网关,免公网IP访问

使用Apisix打造家庭NAS网关 本文使用apisix打造家庭NAS网关&#xff0c;并通过cloudflare进行穿透&#xff0c;可免公网IP访问。首先你的NAS支持Docker&#xff0c;没有NAS也没有关系&#xff0c;只要你的电脑支持Docker同样可以参照该教程。 1 依赖资源准备 准备域名: 免费…