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

用wordpress建一个网站手机网站建设全包

用wordpress建一个网站,手机网站建设全包,外链网站 风险,好用的国外服务器倒着考虑,考虑每个a_i对哪些k值做出贡献,对一个a_i,定义L_i和R_i为: 以上笔误:R_i的定义应该是:连续最多R_i个元素比a_i 小 如果得到了 L_i和R_i,我们从k的长度从小到大依次看看,a_…

倒着考虑,考虑每个a_i对哪些k值做出贡献,对一个a_i,定义L_i和R_i为:

 以上笔误:R_i的定义应该是:连续最多R_i个元素比a_i 

如果得到了 L_i和R_i,我们从k的长度从小到大依次看看,a_i对ans[k](也就是长度为k的滑动窗口的最大值的和)有几次贡献:
用maxx表示max(L_i,R_i)用minx表示min(L_i,R_i)。

发现,当k在区间[1,minx+1],a_i对ans[k]的贡献是 k*a_i,这也是说,当k在[1,minx+1]范围内时,区间长度为多少,a_i就在多少个这么长的区间内出现。

当k在区间[minx+2,maxx+1]时,a_i对ans[k]的贡献是 (minx+1)*a_i,(minx+1)是上一个k的区间中k最大时a_i的出现次数。

当k在区间[maxx+2,minx+maxx+2]时,a_i对ans[k]的贡献是 (minx+maxx+2-k)*a_i,初始k=maxx+2时,贡献为minx*a_i,之后随着k增大贡献值越来越小,最后到0。

在图上画出以上变化过程,发现贡献值的变化率:定义G_i=a_i对ans[i]的贡献值-a_i对ans[i-1]的贡献值,G_i要么是a_i(k在第一区间),要么是0(k在第二区间),要么是-a_i(k在第三区间)。对一个a_i,用差分的方法,可以用常数时间修改这三个区间的变化率,对每个i from 1 to n,时间为O(n),用一次前缀和计算每个点的变化率G_i,再通过变化率计算出每个点的贡献值ans[i],这样可以把复杂度控制在O(n)。

计算L[i]和R[i]:

首先考虑一个特殊情况,如果在一个区间内有多个相同元素并且他们都是这个区间的最大值,比如:
9 1 2 3 2 3 3 9

按照之前L_i和R_i的定义,比如对最左边的那个3,其左右扩到最大,也只是区间:1 2 3 2,但实际上,最左边的3在区间1 2 3 2 3 3中也是最大值,这样会遗漏这个3的贡献。

我们略微调整L_i和R_i的定义,R_i不变,将L_i改成:连续最多L_i个元素小于等于a_i ,现在,如果一个区间中最大值有多次出现,只用最靠右的最大值计算对这个区间的贡献。

如何计算L[i]和R[i]呢?将a_i从小到大排序,如果值相同,按序号排序,也就是按照关键字(a_i,i)排序,倒着遍历排序后的序列,建立一个集合保存之前遍历过的a中元素的下标,若当前遍历到的数在原数组a中的下标是id,用lowerbound在集合中寻找大于id的最小元素和小于id的最大元素,这样找到两个边界,根据(a_i,i)排序的话,找到的边界满足以上L_i和R_i的定义。

#include<bits/stdc++.h>
using namespace std;
using ll=long long ;const ll maxn=2e5+10;
ll n;
ll a[maxn],L[maxn],R[maxn],slope_d[maxn],ans[maxn],slope[maxn];
struct node {ll v,id;bool operator < (const node &rhs) const {if(v==rhs.v) return id<rhs.id;return v<rhs.v;}
}b[maxn];int main()
{ios::sync_with_stdio(0);cin.tie(0);cin>>n;for(ll i=1;i<=n;i++) cin>>a[i];//求L[i]和R[i]for(ll i=1;i<=n;i++) {b[i].v=a[i];b[i].id=i;}stable_sort(b+1,b+1+n);set<ll> s={0,n+1};  //guardfor(ll i=n;i>=1;i--){ll id=b[i].id;set<ll>::iterator it=s.lower_bound(id);ll rb=*it,lb=*(--it);   //right_boundaryll r=rb-id-1,l=id-lb-1;R[id]=r;L[id]=l;s.insert(id);}/*//输出检查L_i和R_ifor(ll i=1;i<=n;i++){printf("i=%lld\n",i);printf("L=%lld R=%lld\n",L[i],R[i]);}*///用差分修改区间斜率for(ll i=1;i<=n;i++) {ll xmin=min(L[i],R[i]),xmax=max(L[i],R[i]);slope_d[1]+=a[i];slope_d[1+xmin+1]-=a[i];slope_d[1+xmax+1]-=a[i];slope_d[1+xmax+xmin+2]+=a[i];}//计算每个点的斜率for(ll i=1;i<=n;i++){slope[i]=slope[i-1]+slope_d[i];}//通过斜率计算一次方程的值for(ll i=1;i<=n;i++){ans[i]=ans[i-1]+slope[i];}for(ll i=1;i<=n;i++){cout<<ans[i]<<"\n";}return 0;
}

http://www.dtcms.com/wzjs/782128.html

相关文章:

  • 食品饮料网站源码深圳比较好网站制作公司有哪些
  • 网站开发卖东西网站建设分工说明
  • 重庆建站多少钱一年广告设计专业前景分析
  • 织梦广告网站模板免费下载asp手机网站管理系统
  • 模板网站建设开发长尾关键词什么意思
  • 怎么登陆建设工程网站如何创建一个简单的网站
  • 深圳网站优化建设做h5网站设计
  • 会议平台网站建设甘肃找人做网站多少钱
  • 电子商务和网站建设区别婚庆公司一条龙项目
  • 上海网站制作培训广州网站制作信科建设
  • 部门网站建设手机做app任务的网站
  • 网站建设目标和功能介绍河南建设资格执业网站
  • 诸暨公司制作网站需要哪些大数据和网站建设
  • 苏州网站建设凡科阿里快速建站
  • 郑州建设银行网站房贷网点在哪搜索引擎优化的方法有哪些?
  • 慢慢来 网站建设快速网站模板公司
  • 重庆定制网站建设地址wordpress信息量几百万
  • ui设计基础淘宝seo是什么意思啊
  • 资生堂网站建设新浪云应用 wordpress
  • 做搜索的网站网站网页建设与维护
  • 郑州巩义网站建设博客程序seo
  • seo撰写网站标题以及描述的案例星子网房产租房
  • 做视频网站的上市公司建设工程是指哪些工程
  • 太原中小学网站建设网站开发学历要求
  • 一个人做网站原型哪个网站公司做的
  • 医院网站建设 价格wordpress主题下载zip
  • 湖南哪里有做网站的刷百度关键词排名
  • 有没有专业做电视测评的网站模板网优酷
  • 企业网站策划进度插件 wordpress
  • 商城网站建设是 什么软件国内包装设计网站