问题

给出一个长度为\(n\)的序列\(a[i]\),有\(m\)次询问,
每次给你一个\(k\),让你求一个最长子串\([l,r]\),使得\(max_l^r\{a_i\}-min_l^r\{a_i\}\leq k\)

思路一

我们显然可以看出这个长度是具有单调性的,于是我们二分答案
\(check\)的方式有以下几种

RMQ

需要\(nlogn\)的时间预处理,空间也要\(nlogn\)
预处理好最大和最小的\(st\)表,\(O(n)\)扫一遍即可

单调队列

时间空间都只需要\(O(n)\)
维护一个单调增的和一个单调减的队列,保持长度即可

不管采用哪种\(check\),思路一的做法都是\(O(nmlogn)\)的

思路二

想一下如果是朴素的暴力,
我们枚举一个必选的右端点\(i\),一定有一个最远的左端点
但是,这个左端点下标是单调不减的!
所以直接单调队列即可。。

证明

很简单,如果右端点是\(i\)的情况下最远的左端点是\(j\)
那么对于右端点\(i',i'>i\),假设左端点\(j'<j\)
因为\(max_j^i\{a_i\}-min_j^i\{a_i\}\leq k\),而\(j\)是最左端点
所以一定有\(max_{j'}^i\{a_i\}-min_{j'}^i\{a_i\}> k\)
根据放缩法,\(max_{j'}^{i'}\{a_i\}-min_{j'}^{i'}\{a_i\}> k\)
O了

关于求最长子串,使得最大减最小小于k的问题-以POJ4003为例的更多相关文章

  1. python实现求最长子串长度

    给定一个字符串,求它最长的回文子串长度,例如输入字符串'35534321',它的最长回文子串是'3553',所以返回4. 最容易想到的办法是枚举出所有的子串,然后一一判断是否为回文串,返回最长的回文子 ...

  2. squee_spoon and his Cube VI---郑大校赛(求最长子串)

    市面上最常见的魔方,是三阶魔方,英文名为Rubik's Cube,以魔方的发明者鲁比克教授的名字命名.另外,二阶魔方叫Pocket Cube,它只有2*2*2个角块,通常也就比较小:四阶魔方叫Reve ...

  3. [Swift]LeetCode395. 至少有K个重复字符的最长子串 | Longest Substring with At Least K Repeating Characters

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  4. [Swift]LeetCode340.最多有K个不同字符的最长子串 $ Longest Substring with At Most K Distinct Characters

    Given a string, find the length of the longest substring T that contains at most k distinct characte ...

  5. [getLongestLength] 加和为0的最长子串长度

    点击这里查看原文 假设一个数组仅仅由1和-1组成,求该数组的和为0的最长子串的长度. 例如: {1,-1,1,-1,1,1,1} 输出:4. 昨天机试的时候做到这道题,不会做,今天思考一下. 普通的解 ...

  6. POJ 3294 Life Forms 后缀数组+二分 求至少k个字符串中包含的最长子串

    Life Forms   Description You may have wondered why most extraterrestrial life forms resemble humans, ...

  7. 后缀数组 - 求最长回文子串 + 模板题 --- ural 1297

    1297. Palindrome Time Limit: 1.0 secondMemory Limit: 16 MB The “U.S. Robots” HQ has just received a ...

  8. 后缀数组(模板题) - 求最长公共子串 - poj 2774 Long Long Message

    Language: Default Long Long Message Time Limit: 4000MS   Memory Limit: 131072K Total Submissions: 21 ...

  9. hdu 3068 最长回文(manachar求最长回文子串)

    题目连接:hdu 3068 最长回文 解题思路:通过manachar算法求最长回文子串,如果用遍历的话绝对超时. #include <stdio.h> #include <strin ...

随机推荐

  1. 关于Mach-O类型文件那点事

    Mach-O文件简介   Mach-O是一种文件格式,是Mach Object文件格式的缩写. 它通常应用于可执行文件,目标代码,动态库,内核转储等中.   Mach-O作为大部分基于Mach核心的操 ...

  2. Java类成员之代码块

    代码块含义:使用{ }括起来的代码 代码块类型: 1.局部代码块:定义在方法体中. 2.构造代码块:也叫初始化代码块,定义在类中方法体之外. 3.静态代码块:定义在类中方法体之外,被static修饰符 ...

  3. TCP 协议详解

    TCP 协议是 更靠近应用层,因此在应用程序中具有更强可操作性,一些重要 socket 选项都和 TCP 协议相关. TCP 头部信息:TCP 头部信息出现在每个 TCP 报文段中,用于指定通信的源端 ...

  4. php5.6.39 源码安装

    1 安装依赖库 yum install -y autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel li ...

  5. 源码分析Kafka 消息拉取流程

    目录 1.KafkaConsumer poll 详解 2.Fetcher 类详解 本节重点讨论 Kafka 的消息拉起流程. @(本节目录) 1.KafkaConsumer poll 详解 消息拉起主 ...

  6. NPOI读取Excel的数据

    首先是给项目安装NPOI.DLL :Install-Package NPOI -Version 2.4.1 HttpPostedFile upLoadPostFile = FileUpload1.Po ...

  7. java intellij 工具的简单用法

    一.目录结构 1.新建项目(Empty Project) ->  新建module(可以有多个) => 出来src文件夹 -> 在src文件夹中新建package -> 在pa ...

  8. django restful 序列化

    https://www.cnblogs.com/wt7018/p/11456440.html https://www.cnblogs.com/wt7018/p/11530962.html

  9. C#中TripleDES对应Java中的DESede即大家说的3DES,附C#及Java加解密结果一致的控制台程序例子

    直接上代码了. Java控制台代码: package Test; import java.security.Key; import javax.crypto.Cipher; import javax. ...

  10. python接口自动化测试 - openpyxl基本使用

    前言 当你做接口自动化测试时,测试用例逐渐变多情况下,如果所有测试用例都通过代码管理将会使得代码十分臃肿,而且维护成本会很高: 所以我们一般会通过Excel去管理所有的测试用例,而openpyxl库提 ...