[关闭]
@yang12138 2018-07-16T21:24:24.000000Z 字数 1165 阅读 1347

51nod 1598 方程最小值

未分类


题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1598

题意:
给定两个长度为的数组,定义:


,求.
数据范围:.

解析:
如果,使.
容易知道对单一的 ,它是直线的部分与轴对称之后得到的曲线.
如果,只需要特殊考虑即可.
否则存在,对有:

  

显然可以知道是一个分段函数,且每段函数都是一条直线,且直线的斜率随着增大而增大.
先求出所有,离散化,可以知道的最小值一定在 中取到.

下面简略对此进行证明:
对所有的从小到大排序,那么对,随着增大到后,的贡献就由变成,其中,也就是的斜率变大了.
说明是一个导数单调不递减的函数,且其斜率在处不存在,其最小值在斜率由负变为正的时候取到,注意此时斜率并不存在,也就是在某个处取到最小值.

考虑维护一个对于的线段树和对于的线段树,那么每加入一个新的,求出离散化之后的大小,在线段树上加上二元组,在上加上二元组,线段树维护区间最小值,同样可以在的时间内求出最大的,使,注意这里的可能是负的.

对线段树只要维护区间加、区间最小值、单点查询、区间查询即可.

那么查询答案就是:


总时间复杂度.

https://paste.ubuntu.com/p/bybKfdTtWW/

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注