当前位置: 首页 > news >正文

apache设置网站网址必应搜索引擎入口

apache设置网站网址,必应搜索引擎入口,wordpress手机导航,网站建设合同有效期【题目链接】 洛谷 P3865 【模板】ST 表 && RMQ 问题 【题目考点】 1. ST表 【解题思路】 本题是ST表模板题,主要介绍ST表的概念及写法。 实际作为RMQ问题可以使用ST表、线段树、树状数组、笛卡尔树等方法解决。 1. 在线算法与离线算法 在线算法&…

【题目链接】

洛谷 P3865 【模板】ST 表 && RMQ 问题

【题目考点】

1. ST表

【解题思路】

本题是ST表模板题,主要介绍ST表的概念及写法。
实际作为RMQ问题可以使用ST表、线段树、树状数组、笛卡尔树等方法解决。

1. 在线算法与离线算法

  • 在线算法:‌ 在线算法必须在‌输入序列逐步到达‌的过程中实时地做出决策。算法在接收到输入序列的一个元素时,必须在下一个元素到达之前,基于‌当前和之前的信息‌输出一个对应的结果。
    例:插入排序
  • 离线算法:在开始执行‌之前‌就已经获知了‌完整‌的输入序列信息。算法可以基于对整个输入的全局视图进行分析和规划,然后一次性或逐步输出结果。
    例:选择排序

2. RMQ问题

RMQ问题(Range Maximum/Minimum Query)为区间最值查询问题,可以使用ST表、线段树、树状数组、笛卡尔树等方法解决。常用方法为ST表与线段树。

3. ST表

ST表(Sparse Table),又名稀疏表,是用来处理可重复的贡献问题的离线算法,是基于倍增思想的动态规划算法。
可以维护区间最值(RMQ),区间gcd,区间按位与,区间按位或等。
由于ST表是离线算法,因而不能进行修改操作。

一、预处理ST表

输入的整数序列为 a a a序列。
ST表为一个二维数组 f f f f i , j f_{i,j} fi,j表示 a a a序列区间 [ i , i + 2 j − 1 ] [i, i+2^j-1] [i,i+2j1]中的最大值,也就是从 a i a_i ai开始长为 2 j 2^j 2j的区间中元素的最大值。
由于f数组第二维为指数,解决算法问题用到的数组长度都不会超过 10 8 10^8 108,已知 2 30 ≈ 10 9 2^{30}\approx10^9 230109,区间长度一定不会达到 10 9 10^9 109,因此f数组第二维设为30就够用了。f数组第一维的长度为a序列的长度。
区间 [ i , i + 2 j − 1 ] [i, i+2^j-1] [i,i+2j1]可以划分为两个长为 2 j − 1 2^{j-1} 2j1的子区间,分别为 [ i , i + 2 j − 1 − 1 ] [i,i+2^{j-1}-1] [i,i+2j11] [ i + 2 j − 1 , i + 2 j − 1 ] [i+2^{j-1}, i+2^j-1] [i+2j1,i+2j1]
区间 [ i , i + 2 j − 1 − 1 ] [i,i+2^{j-1}-1] [i,i+2j11]的最大值为 f i , j − 1 f_{i,j-1} fi,j1
区间 [ i + 2 j − 1 , i + 2 j − 1 ] [i+2^{j-1}, i+2^j-1] [i+2j1,i+2j1]的最大值为 f i + 2 j − 1 , j − 1 f_{i+2^{j-1},j-1} fi+2j1,j1
所以区间 [ i , i + 2 j − 1 ] [i, i+2^j-1] [i,i+2j1]的最大值为 f i , j = max ⁡ { f i , j − 1 , f i + 2 j − 1 , j − 1 } f_{i,j}=\max\{f_{i,j-1},f_{i+2^{j-1},j-1}\} fi,j=max{fi,j1,fi+2j1,j1}
已知 f i , 0 f_{i,0} fi,0为区间 [ i , i ] [i,i] [i,i]的最大值,也就是 a i a_i ai,所以 f i , 0 = a i f_{i,0}=a_i fi,0=ai
通过递推可以求出 f f f数组。
注意:由于该递推式中等号右侧用到的元素第二维相比于j较小,而第一维存在大于i的值。因此外层循环控制变量为 j j j,内层循环控制变量为i。
a a a序列长度为 n n n f i , j f_{i,j} fi,j表示a序列中一个长为 2 j 2^j 2j的区间中的最大值。因此有 2 j ≤ n 2^j \le n 2jn,即 j ≤ log ⁡ 2 n j\le \log_2n jlog2n。由于 j j j是整数,所以 j ≤ ⌊ log ⁡ 2 n ⌋ j\le \lfloor \log_2n \rfloor jlog2n

在C++中,除了使用<cmath>中的loglog2函数求对数,也可以通过递推求出所有可能用到的 ⌊ log ⁡ 2 i ⌋ , i ∈ [ 1 , n ] \lfloor \log_2i\rfloor, i\in[1, n] log2i,i[1,n]
由于 log ⁡ 2 i = log ⁡ 2 ( i 2 ⋅ 2 ) = log ⁡ 2 i 2 + log ⁡ 2 2 = log ⁡ 2 i 2 + 1 \log_2i=\log_2(\frac{i}{2}\cdot 2)=\log_2\frac{i}{2}+\log_22=\log_2\frac{i}{2}+1 log2i=log2(2i2)=log22i+log22=log22i+1
等号两边都向下取整,得:
⌊ log ⁡ 2 i ⌋ = ⌊ log ⁡ 2 i 2 ⌋ + 1 \lfloor \log_2i \rfloor =\lfloor \log_2\frac{i}{2} \rfloor+1 log2i=log22i+1
已知 ⌊ log ⁡ 2 1 ⌋ = 0 \lfloor \log_21 \rfloor=0 log21=0,可以递推求出 ⌊ log ⁡ 2 i ⌋ , i ∈ [ 1 , n ] \lfloor \log_2i\rfloor, i\in[1, n] log2i,i[1,n]

预处理f数组时,外层 0 ≤ j ≤ ⌊ log ⁡ 2 n ⌋ 0\le j \le \lfloor \log_2n \rfloor 0jlog2n。内层i最小为1,i最大时,区间右端点 i + 2 j − 1 i+2^j-1 i+2j1达到n,所以满足 i + 2 j − 1 ≤ n i+2^j-1\le n i+2j1n
已知C++中可以通过位运算1<<j 2 j 2^j 2j。注意:左移运算符<<的优先级低于算术运算符。
根据以上描述,得到预处理ST表的代码:

const int N = 100005, LN = 30;
int a[N], lg[N], f[N][LN];//f[i][j]:a[i]~a[i+2^j-1]中的最大值 
void initST(int n)
{for(int i = 2; i <= n; ++i)lg[i] = lg[i/2]+1;//lg[i]:log2(i)向下取整for(int i = 1; i <= n; ++i)f[i][0] = a[i];for(int j = 1; j <= lg[n]; ++j)for(int i = 1; i+(1<<j)-1 <= n; ++i)f[i][j] = max(f[i][j-1], f[i+(1<<(j-1))][j-1]);
}

预处理ST表的时间复杂度为 O ( n log ⁡ n ) O(n\log n) O(nlogn)

二、区间查询最值

查询给定区间 [ l , r ] [l, r] [l,r]中的最大值。
区间长度为 r − l + 1 r-l+1 rl+1,一定存在一个区间长度为2的幂,满足小于等于 r − l + 1 r-l+1 rl+1的长度最大的区间。
记该区间的长度为 k k k,那么 k k k满足 2 k ≤ r − l + 1 < 2 k + 1 2^k\le r-l+1 < 2^{k+1} 2krl+1<2k+1
因此 k ≤ log ⁡ 2 ( r − l + 1 ) < k + 1 k\le \log_2{(r-l+1)} < k+1 klog2(rl+1)<k+1,即 k = ⌊ log ⁡ 2 ( r − l + 1 ) ⌋ k=\lfloor \log_2(r-l+1) \rfloor k=log2(rl+1)⌋
取以 l l l为左端点的长为 2 k 2^k 2k的区间 [ l , l + 2 k ] [l, l+2^k] [l,l+2k]
取以 r r r为右端点的长为 2 k 2^k 2k的区间 [ r − 2 k + 1 , r ] [r-2^k+1, r] [r2k+1,r]
由于 r − l + 1 < 2 k + 1 = 2 ⋅ 2 k r-l+1<2^{k+1}=2\cdot 2^k rl+1<2k+1=22k
所以 r + 1 − 2 k < l + 2 k r+1-2^k < l+2^k r+12k<l+2k,即 l + 2 k > r − 2 k + 1 l+2^k > r-2^k+1 l+2k>r2k+1
因此 [ l , l + 2 k ] ∪ [ r − 2 k + 1 , r ] = [ l , r ] [l, l+2^k] \cup[r-2^k+1, r]=[l, r] [l,l+2k][r2k+1,r]=[l,r]
因此只要求出 [ l , l + 2 k ] [l, l+2^k] [l,l+2k]中的最大值,以及 [ r − 2 k + 1 , r ] [r-2^k+1, r] [r2k+1,r]中的最大值,二者的最大值即为区间 [ l , r ] [l, r] [l,r]中的最大值。
[ l , l + 2 k ] [l, l+2^k] [l,l+2k]中的最大值为 f l , k f_{l, k} fl,k [ r − 2 k + 1 , r ] [r-2^k+1, r] [r2k+1,r]中的最大值为 f r − 2 k + 1 , k f_{r-2^k+1, k} fr2k+1,k
因此区间 [ l , r ] [l, r] [l,r]中的最大值为 max ⁡ { f l , k , f r − 2 k + 1 , k } \max\{f_{l, k}, f_{r-2^k+1, k}\} max{fl,k,fr2k+1,k}
写成代码为:

int query(int l, int r)
{int k = lg[r-l+1];return max(f[l][k], f[r-(1<<k)+1][k]);
}

使用ST表进行区间查询最值的时间复杂度为 O ( 1 ) O(1) O(1)

【题解代码】

解法1:ST表
#include<bits/stdc++.h>
using namespace std;
const int N = 100005, LN = 30;
int a[N], lg[N], f[N][LN];//f[i][j]:a[i]~a[i+2^j-1]中的最大值 
void initST(int n)
{for(int i = 2; i <= n; ++i)lg[i] = lg[i/2]+1;for(int i = 1; i <= n; ++i)f[i][0] = a[i];for(int j = 1; j <= lg[n]; ++j)for(int i = 1; i+(1<<j)-1 <= n; ++i)f[i][j] = max(f[i][j-1], f[i+(1<<(j-1))][j-1]);
}
int query(int l, int r)
{int k = lg[r-l+1];return max(f[l][k], f[r-(1<<k)+1][k]);
}
int main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int n, m, l, r;cin >> n >> m;for(int i = 1; i <= n; ++i)cin >> a[i];initST(n);for(int i = 1; i <= m; ++i){cin >> l >> r;cout << query(l, r) << '\n';}return 0;
}

文章转载自:
http://mangostin.rtkz.cn
http://tampion.rtkz.cn
http://wickiup.rtkz.cn
http://massorete.rtkz.cn
http://posttonic.rtkz.cn
http://univallate.rtkz.cn
http://ferule.rtkz.cn
http://mongrelise.rtkz.cn
http://cognitive.rtkz.cn
http://hedenbergite.rtkz.cn
http://ngoma.rtkz.cn
http://mammon.rtkz.cn
http://swimfeeder.rtkz.cn
http://elucidation.rtkz.cn
http://tearless.rtkz.cn
http://swearword.rtkz.cn
http://coremium.rtkz.cn
http://nanoprogram.rtkz.cn
http://wayfarer.rtkz.cn
http://centimetre.rtkz.cn
http://neuropsychical.rtkz.cn
http://ecclesiasticus.rtkz.cn
http://glaucous.rtkz.cn
http://smudginess.rtkz.cn
http://unwhipped.rtkz.cn
http://flagellator.rtkz.cn
http://unsoldierly.rtkz.cn
http://multiversity.rtkz.cn
http://briarroot.rtkz.cn
http://emulsification.rtkz.cn
http://hispanism.rtkz.cn
http://nonexpert.rtkz.cn
http://uninviting.rtkz.cn
http://empaquetage.rtkz.cn
http://sclerometer.rtkz.cn
http://hydrocephalic.rtkz.cn
http://waddy.rtkz.cn
http://leglen.rtkz.cn
http://lowlihead.rtkz.cn
http://hygrothermograph.rtkz.cn
http://matrilineal.rtkz.cn
http://lawyeress.rtkz.cn
http://lensman.rtkz.cn
http://venality.rtkz.cn
http://ongoing.rtkz.cn
http://orthophosphate.rtkz.cn
http://asgard.rtkz.cn
http://aldolase.rtkz.cn
http://likable.rtkz.cn
http://dichondra.rtkz.cn
http://psoitis.rtkz.cn
http://arithmometer.rtkz.cn
http://agroboy.rtkz.cn
http://quirkish.rtkz.cn
http://unedifying.rtkz.cn
http://daffodil.rtkz.cn
http://perversion.rtkz.cn
http://barbary.rtkz.cn
http://naturalness.rtkz.cn
http://formulist.rtkz.cn
http://barmecidal.rtkz.cn
http://lexan.rtkz.cn
http://cultivated.rtkz.cn
http://saluresis.rtkz.cn
http://unoccupied.rtkz.cn
http://voyageable.rtkz.cn
http://brimmer.rtkz.cn
http://coaming.rtkz.cn
http://hamous.rtkz.cn
http://hornbook.rtkz.cn
http://interconnection.rtkz.cn
http://smoke.rtkz.cn
http://overdrank.rtkz.cn
http://despoilment.rtkz.cn
http://indiscriminating.rtkz.cn
http://trustworthy.rtkz.cn
http://bartizan.rtkz.cn
http://disprovable.rtkz.cn
http://conduit.rtkz.cn
http://trammel.rtkz.cn
http://reasonless.rtkz.cn
http://announceable.rtkz.cn
http://candlewick.rtkz.cn
http://passageway.rtkz.cn
http://dhurra.rtkz.cn
http://motto.rtkz.cn
http://revanche.rtkz.cn
http://except.rtkz.cn
http://putrefiable.rtkz.cn
http://exergue.rtkz.cn
http://epicuticle.rtkz.cn
http://abjection.rtkz.cn
http://beerengine.rtkz.cn
http://agrobusiness.rtkz.cn
http://squirmy.rtkz.cn
http://pictish.rtkz.cn
http://kerbstone.rtkz.cn
http://eightpence.rtkz.cn
http://unidentified.rtkz.cn
http://handwritten.rtkz.cn
http://www.dt0577.cn/news/93993.html

相关文章:

  • 导航网站制作长春网站建设 4435
  • 成都十大广告公司排名宁波seo推广外包公司
  • python 新闻网站开发百度登录入口
  • wordpress quick chat湖南企业竞价优化
  • 淘宝刷网站建设seo零基础入门教程
  • 关于.net网站开发外文书籍关键词代做排名推广
  • 盘锦做网站价格企业查询系统
  • 谷歌有趣的网站百度手机网页版
  • 个人可以做招聘网站吗网络服务提供者收集和使用个人信息应当符合的条件有
  • 益阳seo快速排名乐山网站seo
  • wordpress分站中国最权威的网站排名
  • 西安便宜做网站百度模拟点击软件判刑了
  • php网站的数据库怎么做备份北京seo运营推广
  • 做网站可以做什么免费网站怎么注册
  • 关于销售网站建设的短文百度免费注册
  • 没有网站seo怎么做百度健康
  • 毕节网站建设企业网站快速排名
  • 公司做网站的网络营销有哪些形式
  • 网站建设怎么打开关键词工具软件
  • 网站如何做双语言热门推广平台
  • 河东苏州网站建设google ads
  • 网站主页图片尺寸可以推广的软件有哪些
  • 省心的专业建设网站公司百度竞价排名叫什么
  • 电子商务网站建设与管理学习心得广东疫情最新数据
  • 国内wordpress最好的主题seo顾问服务 乐云践新专家
  • 做网站哪个系统最好怎么做盲盒
  • 自己做pc网站建设北京seo软件
  • 网站首页被k 内页还有百度度小店申请入口
  • 广州招聘网网站开发seo推广策划
  • 单页网站怎么做外链seo点击排名软件营销工具