jzoj5231-序列问题【分治】

正题


题目大意

nnn个数字,求
(∑l=1n∑r=lnmin{ai}∗max{ai}(i∈[l..r]))%(109+7)(\sum_{l=1}^n\sum_{r=l}^nmin\{a_i\}*max\{a_i\}(i\in [l..r]))\%(10^9+7)(l=1nr=lnmin{ai}max{ai}(i[l..r]))%(109+7)


解题思路

考虑分治,单独在半个内的分治下去计算,考虑如何计算跨过中点的区间。

有两种情况:

  1. minsminsminsmaxsmaxsmaxs全部在一边。
    这时我们可以枚举一边的指针,然后因为minsminsminsmaxsmaxsmaxs都满足单调性,所以另一半边满足的区间范围也满足单调性,之间指针扫过去
  2. minsminsminsmaxsmaxsmaxs在不同边
    枚举右边指针,然后两个指针在左边表示满足的区间的范围限制。之后用前缀和优化计算

时间复杂度O(nlogn)O(n\ log\ n)O(n log n)


codecodecode

#include<cstdio>
#include<algorithm>
#define N 500010
#define ll long long
using namespace std;
const ll XJQ=1e9+7;
ll ans,n,m;
ll mi[N],mx[N],a[N],sum[N];
void dg(ll l,ll r)
{ll j,k;if(l==r){(ans+=a[l]*a[l]%XJQ)%=XJQ;return;}if(l>r) return;ll mid=(l+r)/2;mi[mid+1]=mx[mid+1]=a[mid+1];mi[mid]=mx[mid]=a[mid];for(ll i=mid+2;i<=r;i++)mi[i]=min(a[i],mi[i-1]),mx[i]=max(a[i],mx[i-1]);for(ll i=mid-1;i>=l;i--)mi[i]=min(a[i],mi[i+1]),mx[i]=max(a[i],mx[i+1]);j=mid;for(ll i=mid+1;i<=r;i++){while(mi[j]>=mi[i]&&mx[j]<=mx[i]&&j>=l) j--;ans=(ans+mi[i]*mx[i]%XJQ*(mid-j)%XJQ)%XJQ;}j=mid+1;for(ll i=mid;i>=l;i--){while(mi[j]>=mi[i]&&mx[j]<=mx[i]&&!(mi[j]==mi[i]&&mx[j]==mx[i])&&j<=r) j++;ans=(ans+mi[i]*mx[i]%XJQ*(j-mid-1)%XJQ)%XJQ;}sum[l-1]=0;for(ll i=l;i<=mid;i++)sum[i]=sum[i-1]+mi[i];j=mid;k=mid;for(ll i=mid+1;i<=r;i++){while(mx[j]<mx[i]&&j>=l) j--;while(mi[k]>=mi[i]&&k>=l) k--;if(j+1<=k) ans=(ans+(sum[k]-sum[j])%XJQ*mx[i]%XJQ)%XJQ;}for(ll i=l;i<=mid;i++)sum[i]=sum[i-1]+mx[i];j=mid;k=mid;for(ll i=mid+1;i<=r;i++){while(mx[j]<=mx[i]&&j>=l) j--;while(mi[k]>mi[i]&&k>=l) k--;if(k+1<=j) ans=(ans+(sum[j]-sum[k])%XJQ*mi[i]%XJQ)%XJQ;}dg(l,mid);dg(mid+1,r);
}
int main()
{freopen("seq.in","r",stdin);freopen("seq.out","w",stdout);scanf("%lld",&n);for(ll i=1;i<=n;i++)scanf("%lld",&a[i]);dg(1,n);printf("%lld",ans);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

讨论.NET Core 配置对GC 工作模式与内存的影响

引出问题: Asp.net core应用在 Kubernetes上内存使用率过高问题分析 Asp.net core应用在 Kubernetes上内存使用率过高问题分析 这篇文章中讨论了&#xff0c;在默认情况下&#xff0c;ASP.NET Core程序跑在K8s的Docker中内存使用率>600MB&#xff0c;导致Docker容器频繁重启…

Hadoop生态hive(六)Hive QL表

一、创建表 语法&#xff1a; create [temporary] [external] table [if not exists] [db_name.] table_name [(col_name data_type [comment col_comment], ...)] [comment table_comment] [row format row_format] [stored as file_format] 例子&#xff1a; create tab…

v-for渲染img标签图片

错误的示例 <div v-for"item in list"><img src"{{item.image}}" /> </div>这样做会报错 正确的做法应该是 <div v-for"item in list"><img :src"item.image" /> </div>这样就可以把后端接口的…

Mono的新解释器

Mono即将通过它的JIT编译器和静态编译器以及一个.net解释器以带来一些新的方式来运行你的代码. 在2001年Mono项目诞生之时&#xff0c;我们为.net指令集实现了一个解释器用基于它实现了一个在Linux上的自托管的.net开发环境. 当时我们把解释器定义为一个用来构建JIT编译器的临时…

欢乐纪中某B组赛【2019.1.27】

前言 写完T1T1T1和T2T2T2颓了半天 成绩 RankRankRank是有算别人的 RankRankRankPersonPersonPersonScoreScoreScoreAAABBBCCC2222017myself2017myself2017myself2302302301001001001001001003030304442017xxy2017xxy2017xxy2002002001001001001001001000001111112017zyc2017zy…

forever以及pm2相关命令

sudo npm install forever -g 启动 forever start app.js forever list 停止单个 forever stop [pid] 停止所有 forever stopall pm2 相关命令 查看某个进程的信息 启动进程 pm2 start app.js查看所有进程信息 pm2 list停止进程 pm2 stop 0 ##0为id删除进程 // pm2 de…

Apache Druid(一)简介

翻译自 Apache Druid Apache Druid&#xff08;正在孵化&#xff09;是一个开源的分布式数据存储。德鲁伊的核心设计结合了OLAP /分析数据库&#xff0c;时间序列数据库和搜索系统的思想&#xff0c;为广泛的用例创建了一个统一的系统。Druid将这三个系统中的每个系统的关键特…

jzoj4235-序列【斐波那契数列】

正题 题目大意 两个操作&#xff0c; 询问最前面的可以组成三角形的三个数&#xff0c;和修改一个数。 解题思路 我们考虑答案最后面可以到多少。 a,b,ab,ab∗2,a∗2b∗3a,b,ab,ab*2,a*2b*3a,b,ab,ab∗2,a∗2b∗3 其实就是斐波那契数列&#xff0c;然后因为输出的数都不会很大…

[ASP.NET Core 2.0 前方速报].NET Core 2.0.3 已经支持引用第三方程序集了

发现问题 在将 FineUIMvc&#xff08;支持ASP.NET MVC 5.2.3&#xff09;升级到 ASP.NET Core 2.0 的过程中&#xff0c;我们发现一个奇怪的现象&#xff1a; 通过项目引用 FineUICore 工程一切正常&#xff0c;但是将 FineUICore 编译后&#xff0c;通过程序集的引用方式就会报…

cookie、session、sessionid 与jsessionid

转载自 cookie、session、sessionid 与jsessionid cookie、session、sessionid 与jsessionid&#xff0c;要想明白他们之间的关系&#xff0c;下面来看个有趣的场景来帮你理解。 我们都知道银行&#xff0c;银行的收柜台每天要接待客户存款/取款业务&#xff0c;可以有几种方案…

Failed to load http://localhost:3000/products: The 'Access-Control-Allow-Origin' header has a value

用node写了个接口&#xff0c;但是启动前端的时候一直请求不到数据&#xff0c;报错 Failed to load http://localhost:3000/products: The ‘Access-Control-Allow-Origin’ header has a value ‘http://127.0.0.1:3000’ that is not equal to the supplied origin. 后来在n…

jzoj4226-A【图论】

正题 题目大意 给出mmm条边&#xff0c;nnn个点&#xff0c;求至少加入多少条边可以让每个点的度数不超过kkk。不可以有自环&#xff0c;可以有重边 解题思路 计算出每个点还差几条边。 然后如果需要加入多余边(一边是有用的&#xff0c;一边是没用的)&#xff0c;那么肯定仅…

设计事件驱动的微服务

事件驱动的微服务是一个未受到应有探讨的领域&#xff0c;在近日举行的Con伦敦2017微服务大会上&#xff0c;Greg Young表达了这样的观点。同时&#xff0c;他还特别强调&#xff0c;不应该对所有的微服务都使用事件驱动模式。相反&#xff0c;他建议逐个服务进行考察&#xff…

写一个http服务器

http-server 这是一个http服务程序 http-server是server程序,提供socket连接&#xff0c;http报文处理 http-test是应用层配置处理的例子&#xff0c;提供业务层处理 git地址&#xff1a;https://github.com/90duc/http-server 1、加入依赖 <dependency><groupId>…

express中获取url参数

问号传参获取参数 获取 http://127.0.0.1:3001/user?id10&namezs 中的查询参数&#xff1a; 直接使用 req.query 获取参数即可&#xff1b; 注意&#xff1a;URL 地址栏中通过 查询字符串 传递的参数&#xff0c;express 框架会直接解析&#xff0c;大家只需使用 req.que…

jzoj4227-B【dp,字符串】

正题 题目大意 给定一个后缀数组&#xff0c;和每个地方填不同的字母可以获得的不同权值&#xff0c;求最大权值之和。 解题思路 先用后缀数组aaa计算出每个后缀的排名RankRankRank数组。 然后考虑dpdpdp&#xff0c;首先我们发现对于aia_iai​&#xff0c;每个cai≤cai1c_{…

处理ASP.NET Core中的HTML5客户端路由回退

在使用由Angular&#xff0c;React&#xff0c;Vue等应用程序框架构建的客户端应用程序时&#xff0c;您总是会处理HTML5客户端路由&#xff0c;它将完全在浏览器中处理到页面和组件的客户端路由。几乎完全在浏览器中... HTML5客户端路由在客户端上工作的很好&#xff0c;但是当…

Druid SQL查询数据timeStamp时区问题

一、Druid默认时区 默认使用UTC0000&#xff0c;数据存储的时间timeStamp为UTC0000 二、北京时间 在中国&#xff0c;使用UTC0800&#xff0c;查询时间需要设置时区或者将时区转换为UTC0000时间 以下查询是UTC0000时间&#xff0c;查询结果的dateTime也是UTC0000时间需要进行…

Promise解决异步操作问题

问题: 当有多个回调函数后&#xff0c;就无法保证其输出的顺序性了&#xff0c;而采用嵌套的方式虽可以解决这个问题&#xff0c;但是代码样式太丑&#xff0c;且很乱&#xff0c;Promise的出现就是为了解决这个问题 多个回调函数 var fs require(fs);fs.readFile(./files/1.…

jzoj4228-C【dp】

正题 题目大意 每个点往可以往4个方向之一发射光&#xff0c;要求光不可以相交且不可以经过别的点&#xff0c;求方案总数。 解题思路 将点按xxx排序&#xff0c; 设fl,r,u,d,if_{l,r,u,d,i}fl,r,u,d,i​表示放到第iii个点&#xff0c;最上面的向下发射的点为lll&#xff0c…