首页 > 其他分享 >RMQ问题的四种解法

RMQ问题的四种解法

时间:2023-03-02 16:02:07浏览次数:31  
标签:RMQ 复杂度 ST 算法 解法 数组 nlogn 四种

什么是RMQ问题:

   RMQ (Range Minimum/Maximum Query):对于长度为n的数组A,回答若干询问RMQ(A,i,j)(i,j<=n-1),返回数组A中下标在i,j范围内的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。


1.暴力法最简单的方法,就是遍历数组直接搜索,但是这种方式时间复杂度是O(n)。对于数组长度较大,性能要求高的场景不适用。一般用这个算法就等着TLE,时间复杂度最坏O(Q*N),也不一定超时,签到题可能就直接让你过了。


2.ST(Sparse Table)算法

ST算法是一种更加高效的算法,基于动态规划的思想,以O(nlogn)的预处理代价,换取O(1)的查询时性能。但是,是离线的,也就是说每次修改都是O(nlogn)复杂度,那么用在带修的题目上就显得捉襟见肘了。


3.树状数组


从下向上更新,sum改为max/min即可,但是局限性比较大吧,很少看见用树状数组求最值的题解。


4.线段树是基于分治的思想来实现的,建立是o(nlogn)查询为O(logN),那么也就是说这个可以进行修改,单点修改维护也是logN。


分析也就是说,我们可以抛开1/3不谈,当题目是离线的时侯使用ST算法更快,当题目是在线的时候直接使用线段树维护即可,好像还有一种万能的莫队,不在考虑范围之内。


标签:RMQ,复杂度,ST,算法,解法,数组,nlogn,四种
From: https://blog.51cto.com/u_14682436/6095858

相关文章

  • HTTP传输大文件的四种方法
    1、数据压缩通常浏览器在发送请求时都会带着“Accept-Encoding”头字段,里面是浏览器支持的压缩格式列表,例如gzip、deflate、br等,这样服务器就可以从中选择一种压缩算法,放......
  • 有效的括号,使用js语言的解法
    有效的括号,JavaScript给定一个只包括'(',')','{','}','[',']' 的字符串s,判断字符串是否有效:1.左括号必须用相同类型的右括号闭合。2.左括号必须以正确的顺序闭合。3.每个......
  • Android 数据的四种存储方式
     简介:作为一个完成的应用程序,数据存储操作是必不可少的。因此,Android系统一共提供了四种数据存储方式。分别是:SharePreference、SQLite、ContentProvider和File。由于And......
  • Java——四种线程创建方式
    java中创建线程有四种方式,分别是:继承Thread类,重写run方法,然后创建线程对象并调用start方法。实现Runnable接口,实现run方法,然后创建线程对象并传入Runnable实例,再调用start......
  • 四种语言刷算法之删除链表的倒数第 N 个结点
    力扣19.删除链表的倒数第N个结点1、C/** *Definitionforsingly-linkedlist. *structListNode{ *  intval; *  structListNode*next;......
  • 简述cpu、gpu、fpga和asic四种人工智能芯片的性能
    https://fastonetech.com/newszblog/post/25570.html 简述cpu、gpu、fpga和asic四种人工智能芯片的性能FPGA(FieldProgrammableGateArrayai芯片分类,现场可编程门阵列)......
  • 四种语言刷算法之47. 全排列 II
    47. 全排列II1、C/***Returnanarrayofarraysofsize*returnSize.*Thesizesofthearraysarereturnedas*returnColumnSizesarray.*Note:Bothr......
  • HDU 2888 Check Corners (二维RMQ,3级)
    A-CheckCornersCrawlinginprocess...CrawlingfailedTimeLimit:10000MS    MemoryLimit:32768KB    64bitIOFormat:%I64d&%I64u​​Submit......
  • POJ 2019 Cornfields (二维RMQ,3级)
    B-CornfieldsCrawlinginprocess...CrawlingfailedTimeLimit:1000MS    MemoryLimit:30000KB    64bitIOFormat:%I64d&%I64u​​Submit​......
  • java中四种创建线程的方式
    第一种方式:通过编写类继承Thread,重写run方法实现 实现实例:publicclassThreadTest{publicstaticvoidmain(String[]args){System.out.println("ma......