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

新网站做seo优化步骤郑州网络推广方案

新网站做seo优化步骤,郑州网络推广方案,上海 网站建,沙发网站建设前缀和 定义: 前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。 用途: 前缀和一般用于统计一个区间的和&…

前缀和

定义:

前缀和是指某序列的前n项和,可以把它理解为数学上的数列的前n项和,而差分可以看成前缀和的逆运算。合理的使用前缀和与差分,可以将某些复杂的问题简单化。

用途:

前缀和一般用于统计一个区间的和,为的就是可以将区间和问题的时间复杂度降低,从而节约时间

样例:

假如说我们有一个数组,数组里面有n个元素,给你m个访问,每次给你一个L和R,问你L和R这个区间内的元素的和为多少

我们首先想到的暴力解法应该是每次调用一次for循环,去遍历区间的元素,然后求和,但是这样的时间复杂度在最坏的情况下会达到O(n*m)的时间复杂度,对于大数据来说,这种肯定是要超时的,因此我们可以用到我们的前缀和

首先,我们可以用一个前缀和数组统计出现的和,pre[ i ]放的就是在 i 之前的所有数的和,每次询问,只需要输出pre[ R ] - pre[ L - 1 ]即可,时间复杂度为O(n+m),这样就大大减小的时间复杂度

因此我们可以看到前缀和在多次求解区间和问题上的优势。

一维前缀和

在一维空间内的统计十分简单,只需要设计一个一维pre数组即可

一维前缀和预处理公式

pre[i]=pre[i-1]+a[i];

区间求解公式(从L到R的区间)

pre[R]-pre[L-1]

来看例题

P8218 【深进1.例1】求区间和

题解:很标准的前缀和问题,每次询问的都是一个区间的和,那么我们直接用一维前缀和即可

#include<bits/stdc++.h>
using namespace std;
int n;
int a[100005];
int m;
int pre[100005];
int l,r;int main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];pre[i]=pre[i-1]+a[i];}cin>>m;for(int i=1;i<=m;i++){cin>>l>>r;cout<<pre[r]-pre[l-1]<<"\n";}return 0;
} 

二维前缀和

二维前缀和的计算是基于容斥原理的,我们需要通过对矩阵面积的划分计算来的出二维前缀和的预处理公式和求和公式

预处理公式:

我们通过这个图来了解,二维前缀和的预处理公式,首先我们将元素变成矩阵的一个一个的小方块,我们看如何去求第i行第j列之前的面积,首先我们的矩阵面积可以S(i-1,j)+S(i,j-1)的面积之和,但是多了一部分重叠部分S(i-1,j-1),并且加上额外的有下角元素a(i,j),因此我们的预处理公式就可以得出:

pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+a[i][j];

二维前缀和求和公式:

 也是将计算变为矩阵面积来看,假如说我们想算从(a,b)到(i,j)的前缀和,我们首先可以用整个的大面积( S(i,j) )的面积减去S(a-1,j)和S(i,b-1),但是通过容斥原理发现我们多减一部分,那就是

S(a-1,b-1),因此我们就可以得出二维前缀和求和公式:

pre[i][j]-pre[a-1][j]-pre[i][b-1]+pre[a-1][b-1]

 我们来看一道例题:最大加权矩阵

这道题,一眼就能看出来是二维前缀和,但是由于数据比较小,所以可以暴力枚举其范围,总共四重循环,计算其中前缀和的最大矩阵和,最后输出即可

#include<bits/stdc++.h>
using namespace std;int n;
int a[125][125];
int pre[125][125];signed main()
{cin>>n;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){cin>>a[i][j];pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+a[i][j];}}int ans=-0x3f3f3f3f;for(int x1=1;x1<=n;x1++){for(int y1=1;y1<=n;y1++){for(int x2=x1;x2<=n;x2++){for(int y2=y1;y2<=n;y2++){ans=max(ans,pre[x2][y2]-pre[x1-1][y2]-pre[x2][y1-1]+pre[x1-1][y1-1]);}}}}cout<<ans;return 0;
}

P2004 领地选择

题解,就是一个二维前缀和模版,很简单,直接写就OK了,只需要记录其中的左上角坐标就OK

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,c;
int a[1005][1005];
int pre[1005][1005];
int ans=-0x3f3f3f3f3f3f3f3f; 
int x,y;signed main()
{cin>>n>>m>>c;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>a[i][j];pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+a[i][j];}}for(int i=c;i<=n;i++){for(int j=c;j<=m;j++){if(ans<pre[i][j]-pre[i-c][j]-pre[i][j-c]+pre[i-c][j-c]){ans=pre[i][j]-pre[i-c][j]-pre[i][j-c]+pre[i-c][j-c];x=i;y=j;}}}cout<<x-c+1<<" "<<y-c+1;return 0;
}

 

 

前缀和的应用(包括二分思想,这里默认各位看官老爷都会)

P1314 [NOIP2011 提高组] 聪明的质监员

 题意:就是说给你n个矿石,然后,这n个矿石都有自己的重量w,以及其价值v,我们有一种判断机制,就是说给你m个区间范围,每次给你一个左边界L和右边界R,我们的计算机理是,这个区间内的大于规定筛选重量W的数量,乘以大于筛选重量的价值,然后将总的算出来的y累加到一起,看看和规定的标准值S最小差多少,输出最小的参数W

思路,我们发现这题数据超大,必然会有优化方法,我们通过上面·的题意可以发现,我们的参数设置的越大,能过筛选的石头越少,得到的y值越小,设置的越小,能筛选过的石头越多,得到的y值越大,因此我们可以用二分(二分的范围就是给的数据的石头的最小值到最大值,但是我们还要扩增范围,最小值减一,最大值加二)然后我们每次二分的就是参数W,然后在计算过程中要用到前缀和优化,我们要去记录出现的大于参数的矿石数目以及总价值,然后我们去计算总的Y值,Y值大于标准值S就说明,我们的参数设置的小了,要增大左边界,要是小于标准值,就说明,我们的参数设置的太大了,要缩小右边界

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,s;
int w[200005];
int v[200005]; 
int l[200005],r[200005];
int maxn=0;
int minn=0x3f3f3f3f3f3f3f3f;
int sumn[200005];
int sumv[200005];
int ans=0;//统计本次筛选的总价值
int mn=0x3f3f3f3f3f3f3f3f;//统计最小差值 
bool check(int mid)
{memset(sumn,0,sizeof(sumn));memset(sumv,0,sizeof(sumv));int ans=0;//统计总的价值也就是y[i] for(int i=1;i<=n;i++){if(w[i]>=mid){sumn[i]=sumn[i-1]+1;//统计能过筛查的数量sumv[i]=sumv[i-1]+v[i];//统计能过筛查的价值 }else{sumn[i]=sumn[i-1];sumv[i]=sumv[i-1];}}for(int i=1;i<=m;i++){ans+=(sumn[r[i]]-sumn[l[i]-1])*(sumv[r[i]]-sumv[l[i]-1]);}mn=min(mn,llabs(ans-s));if(ans>s)return true;return false;
}
signed main()
{cin>>n>>m>>s;for(int i=1;i<=n;i++){cin>>w[i]>>v[i];maxn=max(maxn,w[i]);//二分的上下边界 minn=min(minn,w[i]);}int left,right,mid;for(int i=1;i<=m;i++){cin>>l[i]>>r[i];}left=minn-1,right=maxn+2;while(left<=right){mid=(left+right)/2;if(check(mid)){left=mid+1;}else{right=mid-1;}}cout<<mn;return 0;
}

http://www.rdtb.cn/news/14223.html

相关文章:

  • 网站建设基本情况介绍如何推广软件
  • 网站建设与推广王钊关键词林俊杰免费听
  • 百度官网认证怎么优化网站性能
  • wordpress七牛图片插件优化大师专业版
  • 假网站怎么做seo外贸网站制作
  • 网站有哪些类型和它的成功案例做seo如何赚钱
  • 做网站主色调选择网站权重如何查询
  • 域名空间网站推广seo入门培训
  • 做网站的集团合肥百度搜索排名优化
  • 若尊二级域名分发seo顾问什么职位
  • 服务器上的网站怎么做301百度信息流广告投放
  • 网站收录查询方法效果最好的推广软件
  • 珠海专业网站建设公司哪家好百度投诉电话人工客服24小时
  • 独立网站做跨境电商可以行吗免费的网站推广在线推广
  • 社区教育网站建设方案seo优化方向
  • 自媒体培训优化营商环境条例解读
  • 做淘宝类网站软文写作案例
  • 化妆品网站设计种子库
  • 怎么做网站收广告费sem竞价推广是什么
  • 东莞回收网站设计成都网络优化托管公司
  • 专业团队p图湖南seo推广系统
  • gate网站合约怎么做空软件开发需要多少资金
  • 网站头部代码国家免费技能培训有哪些
  • 有哪些做的好的营销型网站seo综合优化公司
  • 个人网站备案时间seo排名工具哪个好
  • 怎么做外贸网站的邮箱签名怎么seo网站排名
  • 淘宝网页版怎么注销账号企业seo顾问服务阿亮
  • 成都知名网站建设公司搜狗搜索网页版
  • 网站兼容性怎么调专业海外网站推广
  • 给你一个网站你怎么做百度客服人工服务电话