草庐IT

st表

今人不见古时月,今月曾经照古人 2023-03-28 原文

位运算

与& 或| 异或^ 左移<< 右移>>

\(x<<y=x·2^{y}\)

\(x>>y=\frac{x}{2^{y}}\)

\(2a+1=(a<<1)|1\)

\(a\)%\(2=a\)&\(1\)

st表

当st表合并的复杂度为\(O(1)\)时,st表构建的复杂度为\(O(nlogn)\),查询的复杂度为\(O(1)\),但是st表并不支持修改。

求区间最大值/最小值:复杂度\(O(n)\)

st表的核心在于倍增和DP。

\(f[i][j]\)表示以第\(i\)个数作为左端点,长度为\(2^{j}\)的区间的最值,也就是\([i,i+2^{j}-1]\)的区间最值。

\(f[i][0]=a[i]\)

\(f[i][j]=merge(f[i][j-1],f[i+2^{j-1}][j-1])\)

询问一个区间\([l,r]\)的区间最值,

区间的极值就是两个长度为\(2^{k}\)的子区间的极值。

设 $ k = \left \lfloor log ( r - l + 1 ) \right \rfloor $ ,那么,

\(ans=merge\{f[l][k],f[r-2^{k}+1][k]\}\)

merge函数表示信息合并,询问最大值时用max,询问最小值时用min。

例题

【问题描述】

我们有一个n行m列的矩阵。

K次询问矩阵矩阵最值。

注意

1、如果块重叠对最后的答案有影响,那么不能使用st表处理。

2、调用一次cmath库中的\(log_{2}\)函数时间复杂度是\(O(logn)\)的,我们可以预处理出Log数组。

并非原创,仅是整理,请见谅

有关st表的更多相关文章

  1. ruby - 'string' 到 ['s' , 'st' , 'str' , 'stri' , 'strin' , 'string' ] - 2

    什么是最优雅的做法'string'=>['s','st','str','stri','strin','string']我一直在想一个类轮,但我不能完全做到。欢迎任何解决方案,谢谢。 最佳答案 这个怎么样?s='string'res=s.length.times.map{|len|s[0..len]}res#=>["s","st","str","stri","strin","string"] 关于ruby-'string'到['s','st','str','stri','strin','s

  2. ruby-on-rails - Ruby DateTime 格式 : How can I get 1st, 第二、第三、第四? - 2

    首先,DateTime格式变量似乎没有在任何地方记录,因此对可以在rubydocs中向我展示此内容的任何人+1。其次,在查看Date.strftime函数代码时,我没有看到任何可以让我执行以下操作的内容:2010年9月9日,星期四有人知道这是否可行吗? 最佳答案 您可能想要takealookhere.总结time=DateTime.nowtime.strftime("%A,%B#{time.day.ordinalize}%Y")请注意,您在纯Ruby(2.0)中运行,您需要调用:require'active_support/core

  3. ruby-on-rails - 序数 : '1' as '1st' , '2' 为 '2nd' 等的 Ruby 格式 - 2

    ruby或rails中是否有任何东西可以处理序数的格式:'1'为'1st','2'为'2nd',等等? 最佳答案 看起来你正在寻找序号:TheRubyonRailsframeworkischockfullofinterestinglittlenuggets.Ordinalizeisanumberextensionthatreturnsthecorrespondingordinalnumberasastring.Forinstance,1.ordinalizereturns“1st”and22.ordinalizereturn“22n

  4. javascript - 无法构造 'Blob' : The 1st argument provided is either null, 或无效的 Array 对象。 - 2

    我今天开始使用filesaver.js。我创建了以下函数:functionsaving(){varblob=newBlob(final_transformation,{type:"text/plain;charset=utf-8"});saveAs(blob,"helloworld.txt");}但是当我调用该函数时,我得到“无法构造‘Blob’:提供的第一个参数要么为空,要么为无效的Array对象。”有什么想法吗? 最佳答案 由于您不会告诉我们final_transformation是什么,我们必须在没有上下文的情况下进行猜测。试

  5. javascript - Angular 2/4 : How to POST HTML form (Not ajax) thru component on callback of 1st ajax submit? - 2

    我想通过以老式方式(非Ajax)发布输入字段来将表单提交到外部站点,它也提交了但是Angular在跳转到外部页面之前在控制台中给我错误。我在HTML(模板)中使用了以下代码在组件中onSubmit(obj:any){if(!this.form.valid){this.helper.makeFieldsDirtyAndTouched(this.form);}else{this.loader=true;//savedatainonline_payment_ipnthis.paymentService.saveOnlinePaymentIpn({},'paypal').subscribe(r

  6. FEMTO-ST轴承数据集(IEEE PHM 2012 Challenge) - 2

    挑战赛简介IEEEPHM2012挑战赛由IEEE可靠性协会和法国FEMTO-ST研究所组织。挑战的重点是估算轴承的剩余使用寿命(RUL)。这是一个关键问题,因为大多数旋转机械的故障都与轴承有关,对电力和运输等行业的机械系统和设备的可用性、安全性和成本效益有很大影响。该挑战对所有潜在的与会者开放,鼓励学术团队(来自大学)和专业团队(来自工业)参赛。两个类别中得分最高的参赛者将被邀请在2012年IEEE国际PHM会议(http://www.phmconf.org/)上发表演讲。挑战赛的数据集由法国FEMTO-ST研究所(http://www.femto-st.fr/)提供。实验是在一个实验室实验平

  7. c - 'st_blksize' : is not a member of 'stat' on Windows - 2

    因为我想从Linux移植到Windows。我意识到Windows和LinuxAPI都有stat.h但有一些不同。问题是Windowsstat.h没有st_blksize变量,但Linux有。我真的不明白st_blksize也可以做什么。谁能帮我解决这个问题?如何在Windows上找到与st_blksize等效的内容? 最佳答案 对于Linux结构定义,请访问此处:http://pubs.opengroup.org/onlinepubs/7908799/xsh/sysstat.h.html主要摘录:st_size:文件大小(以字节为单

  8. 新手入门:ST-Link和J-Link仿真器的使用 - 2

    当编译完成之后,点击下载,出现这样的错误提示,说明我们的仿真器配置没有配置好,下面我们讲讲J-Link和ST-Link分别应该如何配置(1:编译,后续只编译修改过的部分,速度较快2.全部编译,每次都是全部编译,速度较慢3.下载) 通常都是在编译后直接利用ST-Link和J-link通过keil下载(当然也可以使用USB借助FlyMcu下载),所以在keil安装并破解之后,想要正确的运行工程文件,还需要下载link并配置 图一:ST-Llink(像U盘)                          图二:J-Link(四根线的口要对准)ST-Link:链接:https://pan.baid

  9. javascript - AngularJS:获取后缀为 rd、th 和 st 的日期 - 2

    如何在AngularJava脚本中格式化日期?代码Calendarof{{dt}}我得到的值是2014-06-05T12:38:42.744Z我试过了Calendarof{{dt|date:'MMMMdd'}}这给了我CalendarofJune05我需要它作为CalendarofJune05th或7月2日,依此类推。后方rd,th,st正是我要寻找的。AnuglarDocs很好,但不要指定此格式。 最佳答案 我想这就是您要找的-http://www.michaelbromley.co.uk/blog/13/an-ordinal-d

  10. php - Postgis - st_distance - 2

    我在postgis中遇到st_distance函数的问题。它返回错误的结果——对于小距离,误差不大——10米,也许20米,但对于更大的距离,我的结果与例如谷歌地图结果之间的差异太大——700米,最高2公里或更高。我正在使用srid=4326。第二件事-也许这就是问题-说我有4公里远的地方。Postgis说距离大约0.0417{{some_units}}。现在我只是将结果乘以100并得到或多或少准确的结果。我可以向这个函数传递一些参数,表示“以公里/米为单位的返回值”吗?附言。postgres版本是9.0.1 最佳答案 您应该使用地理

随机推荐