问题

给出一个长度为\(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了

最新文章

  1. Java数据结构——平衡二叉树的平衡因子(转自牛客网)
  2. 【转载】--仅用 []()+! 就足以实现几乎任意Javascript代码
  3. SimpleDateFormate的使用
  4. nyoj 127 星际之门(一)
  5. memcache实现公共计数器网站
  6. 聊天气泡的绘制(圆角矩形+三角形+黑色边框,关键学会QPainter的draw函数就行了),注意每个QLabel都有自己的独立坐标
  7. Linux下查看MySQL的安装路径
  8. 我的Emacs配置文件
  9. FtpUtil.java测试 (淘淘商城第三课文件上传)
  10. 2017-07-04(sudo wc sort)
  11. php json数据 入库时 转义字符丢失
  12. Lucene 07 - 对Lucene的索引库进行增删改查
  13. iOS开发者学习Flutter
  14. 60道Python面试题&amp;答案精选!找工作前必看
  15. linux下ifconfig命令看不到IP centos7——ens33
  16. 通过DFS求解有向图(邻接表存储)中所有简单回路
  17. DelegatingFilterProxy作用浅析
  18. percona-toolkit工具的使用
  19. Smith Numbers POJ - 1142 (暴力+分治)
  20. scanf,fscanf,sscanf的区别

热门文章

  1. 傅立叶变换—FFT
  2. 程序员必知的技术官网系列--mysql篇
  3. ubuntu下报错Sub-process /usr/bin/dpkg returned an error code (1)的解决方法
  4. Scala实践7
  5. HTTPS中的TLS
  6. 通过例子进阶学习C++(六)你真的能写出约瑟夫环么
  7. cogs 1361. 树 线段树
  8. Docker 学习 1 入门
  9. python requests 库 首次使用
  10. numpy 数组的拼接