洛谷传送门

题目大意:太长略

每新加入一个僵尸,容易得到方程$ans[i]=max{\frac{sum_{i}-sum_{j-1}}{s_{i}+d(i-j)}}$

即从头开始每一段僵尸都需要在规定距离内被消灭

展开式子,可得$ans[i]=max{\frac{sum_{i}-sum_{j-1}}{s_{i}+di-dj}}$

是不是很像斜率的式子= = ----$(y2-y1)/(x2-x2)$

维护一个下凸包,这次不是用直线去切凸包,而是把凸包上每个点都向一个定点去连直线,求最大的斜率

会发现,凸包上连出来的直线的斜率是一个凸函数,再利用三分法进行查找

三分法类似于一个爬坡的过程,每次都缩小两侧山坡范围,最终找到山顶

至于为什么维护下凸包呢,画个图就明白了,如果之前某个点$a$,与点$b(b_{x}<a_{x})$的斜率,大于新加入的点$i$与$b$的斜率,那么如果右侧出现一个点,向他们连直线,显然$i$的斜率大于$a$,可以用三角形的性质去证

因为$x$递增,用单调栈维护下凸包即可

时间$O(nlogn)$

貌似比较斜率必须用$double$,不然爆$long\;long$

 #include <cmath>
#include <queue>
#include <vector>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N1 101000
#define M1 205
#define ll long long
#define dd double
#define uint unsigned int
using namespace std; ll gll()
{
ll ret=;int fh=;char c=getchar();
while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
while(c>=''&&c<=''){ret=ret*+c-'';c=getchar();}
return ret*fh;
}
int n;
ll D;
ll a[N1],s[N1],sa[N1];
ll x[N1],y[N1];
int stk[N1],tp;
inline dd gslope(int i,int j){
return 1.0*(y[i]-y[j])/(x[i]-x[j]);
} int main()
{
//freopen("t2.in","r",stdin);
scanf("%d%lld",&n,&D);
for(int i=;i<=n;i++)
a[i]=gll(),s[i]=gll(),sa[i]=sa[i-]+a[i];
dd ans=;
for(int i=;i<=n;i++)
{
x[i]=1.0*i*D,y[i]=sa[i-];
while(tp>&&gslope(stk[tp],stk[tp-])>=gslope(i,stk[tp-]))
tp--;
stk[++tp]=i;
int l=,r=tp,mid1,mid2;
x[]=1.0*s[i]+1.0*D*i,y[]=sa[i];
while(r-l>=)
{
mid1=(l+l+r)/,mid2=(l+r+r)/;
if(gslope(,stk[mid1])>gslope(,stk[mid2]))
r=mid2;
else
l=mid1;
}
dd ma=;
for(int j=l;j<=r;j++)
ma=max(ma,gslope(,stk[j]));
ans+=ma;
}
printf("%.0lf\n",ans);
return ;
}

BZOJ 3203 [SDOI2013]保护出题人 (凸包+三分)的更多相关文章

  1. bzoj 3203: [Sdoi2013]保护出题人 凸包

    题目大意: http://www.lydsy.com/JudgeOnline/problem.php?id=3203 题解 首先我们考虑对一大波僵尸来袭的情况进行分析 假设来袭的僵尸是\(\{ a_1 ...

  2. [BZOJ3203][SDOI2013]保护出题人(凸包+三分)

    https://www.cnblogs.com/Skyminer/p/6435544.html 先不要急于转化成几何模型,先把式子化到底再对应到几何图形中去. #include<cstdio&g ...

  3. BZOJ 3203 Luogu P3299 [SDOI2013]保护出题人 (凸包、斜率优化、二分)

    惊了,我怎么这么菜啊.. 题目链接: (bzoj)https://www.lydsy.com/JudgeOnline/problem.php?id=3203 (luogu)https://www.lu ...

  4. 【BZOJ】3203: [Sdoi2013]保护出题人(几何+三分+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3203 wa无数次QAQ,犯sb错....一是数组没有引用...二是输出转成了int(越界了sad). ...

  5. BZOJ3203 SDOI2013保护出题人(三分)

    给a做一个前缀和,那么现在每次所查询的就是(sn-sk)/(bn+nd-(k+1)d)的最大值.这个式子可以看成是(bn+nd,sn)和((k+1)d,sk)所成直线的斜率. 脑补一条直线不断减小斜率 ...

  6. 【bzoj3203】[Sdoi2013]保护出题人 凸包+二分

    题目描述 输入 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离.接下来n行每行两个空格隔开的正整数,第i + 1行为Ai和 Xi,分别表示相比上一关在僵尸队列排头增加血量为Ai 点的 ...

  7. 【BZOJ3203】[Sdoi2013]保护出题人 二分+凸包

    [BZOJ3203][Sdoi2013]保护出题人 Description Input 第一行两个空格隔开的正整数n和d,分别表示关数和相邻僵尸间的距离.接下来n行每行两个空格隔开的正整数,第i + ...

  8. [BZOJ3203] [SDOI2013]保护出题人(二分+凸包)

    [BZOJ3203] [SDOI2013]保护出题人(二分+凸包) 题面 题面较长,略 分析 对于第i关,我们算出能够打死前k个个僵尸的最小能力值,再取最大值就可以得到\(y_i\). 前j-1个僵尸 ...

  9. 洛谷 P3299 [SDOI2013]保护出题人 解题报告

    P3299 [SDOI2013]保护出题人 题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企 ...

随机推荐

  1. 洛谷P1055 ISBN号码

    题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括 999 位数字. 111 位识别码和 333 位分隔符,其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上 ...

  2. 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) B】Unnatural Conditions

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 让a+b的和为100000000...0这样的形式就好了 这样s(a+b)=1<=m就肯定成立了(m>=1) 然后至于s ...

  3. redis_ 5 集群

    [转自 ]https://www.cnblogs.com/hjwublog/p/5681700.html#_label0 Redis集群简介 Redis 集群是3.0之后才引入的,在3.0之前,使用哨 ...

  4. DOM中元素节点,属性节点,文本节点的理解

    节点信息 每个节点都拥有包含着关于节点某些信息的属性.这些属性是: nodeName(节点名称) nodeValue(节点值) nodeType(节点类型) nodeType nodeType 属性可 ...

  5. robot Framework选择单选框

  6. 百度url 参数详解全

    百度url解析Joe.Smith整理大全 百度url解析Joe.Smith整理大全...1 本文链接:http://blog.csdn.net/qq_26816591/article/details/ ...

  7. 统制Highcharts中x轴和y轴坐标值的密度

    统制Highcharts中x轴和y轴坐标值的密度 www.MyException.Cn 发布于:2012-06-26 10:04:13 浏览:688次 1 控制Highcharts中x轴和y轴坐标值的 ...

  8. [SharePoint]2013装过WindowsServerAppFabricSetup_x64_6.1导致安装不能继续

    还是不要自己手动安装2013支持组件.让他自己慢慢下吧. 浪费一个星期的时间. 特此纪念! 令解http://www.cnblogs.com/jianyus/p/3287625.html

  9. Android 自己定义View学习(2)

    上一篇学习了基本使用方法,今天学一下略微复杂一点的.先看一下效果图 为了完毕上面的效果还是要用到上一期开头的四步 1,属性应该要有颜色,要有速度 <?xml version="1.0& ...

  10. Java向上转型和向下转型(附具体样例)

                                                Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一 ...