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

苏州网站 建设 公司wordpress手机边距

苏州网站 建设 公司,wordpress手机边距,如何做网站认证,建设网站 可以用3层架构吗目录 一、解决什么类型的问题 二、ST算法原理 三、实现 一、解决什么类型的问题 对于一个数列a,现要进行k次操作: 给定l和r,输出l和r之间的最大值 很容易想暴力,总时间差不多是 二、ST算法原理 因为任意一个自然数都可以被表示为数个2…

目录

一、解决什么类型的问题

二、ST算法原理

三、实现


一、解决什么类型的问题

对于一个数列a,现要进行k次操作:

给定l和r,输出l和r之间的最大值

很容易想暴力,总时间差不多是O(r-l)*k

二、ST算法原理

因为任意一个自然数都可以被表示为数个2的n次幂的和(废话),所以我们可以通过在输入数列a时进行一次预处理,将数列分为n个小段,对于每一个小段求出最大值(有点像最优子结构的意思),最后合并成原来的数列。你可能会觉得他会漏掉一部分区间,但是任意区间都可以通过两个二次幂的区间运算得到

比如[1,3]=max([1,2],[2,3])

三、实现

先设f[i][j]表示数列a中从i开始的2^j个数的最大值,其中f[i][0]=a[i],因为f[i][0]表示a[i]到a[i]间的最大值。

在预处理,也就是地推时,我们使用倍增的思想

f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);

即从=以f[i][j] 为分界线,将他左边分成一段,再把他的右边分成一段.

f[i][j-1]的i表示i为起点,2^{j-1}是长度。

f[i+(1<<(j-1))][j-1]中:

        i+(1<<(j-1)) 表示右区间的起点也就是左区间的终点+1

来看一道模板题:

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

先写读入和输出部分 


int main(){n=read();m=read();for(int i=1;i<=n;++i){a[i]=read();}pre_work();//预处理函数for(int i=1;i<=m;++i){int a,b;a=read();b=read();printf("%d\n",ST_query(a,b));}return 0;
}

定义 ST_query(a,b)返回[a,b]区间的最大值

预处理

接下来是最重要的预处理函数

void pre_work(){for(int i=1;i<=n;++i){f[i][0]=a[i];}int t=log(n)/log(2)+1;for(int j=1;j<t;j++){for(int i=1;i<=n-(1<<j)+1;i++){f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);}}
}


首先确定dp边界,就上上面说的f[i][0]的最大值就是a[i]。赋初值

随后确定循环次数,数列的总长度为n,使用 \frac{log(n)}{log(2)}+1计算出需要处理的区间长度的最大二进制幂次加 1,实际意义表示原来的数列长度分解为k个2的n次方后的2的指数,具体来说是

n=8,计算得k=4,表示循环变量会经过2^{0} ,2^{1},2^{2},2^{3}中的0,1,2,3,以此保证以2^{j-1}为长度划分序列不会超过序列的原长度。

查找

int ST_query(int l,int r){int k=log(r-l+1)/log(2);return max(f[l][k],f[r-(1<<k)+1][k]);
}

计算出一个k,使得2^{k} 不能超过数列的最大长度

但是两段之间不能有空隙,如果漏掉了一些数,就不能保证是最大值

所以有空隙就不行,但是有重叠没关系

但现在我们知道1区间的起点,但问题是我们并不知道2区间的长度。如果从1区间的起点加上1区间的长度,有极大概率超出原数列的长度。所以我们采取一种措施,就是从数列的末端向前移动2^{j-1}个单位,以此查找

Talk is cheap,show me the code 

AC Code:

#include<bits/stdc++.h>
using namespace std;
int const N=1e5+10;
int a[N],f[N][32];
int n,m;
int read(){int s=0,fl=1;char w=getchar();while(w>'9'||w<'0'){if(w=='-')fl=-1;w=getchar();}while(w<='9'&&w>='0'){s=s*10+(w^48);w=getchar();}return fl*s;
}
void pre_work(){for(int i=1;i<=n;++i){f[i][0]=a[i];}int t=log(n)/log(2)+1;for(int j=1;j<t;j++){for(int i=1;i<=n-(1<<j)+1;i++){f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);}}
}int ST_query(int l,int r){int k=log(r-l+1)/log(2);return max(f[l][k],f[r-(1<<k)+1][k]);
}int main(){n=read();m=read();for(int i=1;i<=n;++i){a[i]=read();}pre_work();for(int i=1;i<=m;++i){int a,b;a=read();b=read();printf("%d\n",ST_query(a,b));}return 0;
}

 

 


文章转载自:

http://VB8ThJUA.ggjLm.cn
http://khTql6a4.ggjLm.cn
http://HJUWZPjA.ggjLm.cn
http://QcODCK0Z.ggjLm.cn
http://mKgi5HVV.ggjLm.cn
http://F29dUtC7.ggjLm.cn
http://9AWLXNWI.ggjLm.cn
http://fDkFFk43.ggjLm.cn
http://QDhrEVS1.ggjLm.cn
http://MmzcS6LZ.ggjLm.cn
http://CBcvvAFK.ggjLm.cn
http://bOxuKXvU.ggjLm.cn
http://DPZl0WPM.ggjLm.cn
http://NOWtiC6o.ggjLm.cn
http://zaK8Do8F.ggjLm.cn
http://69XCHJlB.ggjLm.cn
http://wbu5wNjj.ggjLm.cn
http://J9rZIzIq.ggjLm.cn
http://yMsNbCIt.ggjLm.cn
http://uSid4X27.ggjLm.cn
http://oWHmtwmG.ggjLm.cn
http://70i9sJdb.ggjLm.cn
http://gxMChkG8.ggjLm.cn
http://v7pqsRRe.ggjLm.cn
http://v0xPGOmW.ggjLm.cn
http://12m7zgaP.ggjLm.cn
http://QRKhvo5h.ggjLm.cn
http://nhG9mOfO.ggjLm.cn
http://d1AQXg9M.ggjLm.cn
http://u0NtCFzC.ggjLm.cn
http://www.dtcms.com/wzjs/633353.html

相关文章:

  • 有什么网站建设软件wordpress如何设置菜单
  • 没有文章更新的网站怎么做优化企业咨询服务合同模板
  • 展示型网站建设模板用dw做php网站
  • 移动端网站开发流程图室内平面网页设计培训
  • 免费建网站系统安徽网站开发项目
  • 平板网站建设微博的网站连接是怎么做的
  • 杭州微信网站制作怎样建设网站呢
  • 辽宁建设安装集团有限公司网站网站建设售后服务明细
  • 柳州做网站的公司有哪些上海市新闻
  • 做网站收费 优帮云2021网络公司排名
  • 做网站销售经常遇到的问题新浪舆情系统
  • 来宾住房和城乡建设局网站设计公司是做什么的
  • 做课件挣钱的网站wordpress产品
  • 各类手机网站建设纯静态企业网站
  • 如何看网站的语言怎么购买域名和服务器
  • 河北邯郸建网站做短视频必备的网站
  • html用表格来做网站布局中国建设教育网站
  • 网站开发培训是不是坑贵阳市住房和城乡建设部网站
  • 网站开发公司简介怎么写网站开发的流行架构
  • html网站代码网站哪家做的比较好的
  • 网站建设方案后期服务网站建设制作细节
  • 烟台教育平台网站建设wordpress 内容采集
  • 网站开发毕设设计论文wordpress主题百度
  • 长尾网站搜索引擎中国数控机床网
  • 杭州微网站开发郑州网站建设包括哪些
  • 网站建设教程 乐视网wordpress页面调取文章
  • 设计比较有特色的网站南城网站建设公司信息
  • 网站页面分类网站主流系统
  • 网站制作素材图片网站开发外包公司坑
  • 网站提供服务商广告店名字怎么取好