人生第一道三分?。。。

  把进攻序列里的前i只僵尸看成一个点,横坐标是第i只僵尸到达的时间,纵坐标是这i只僵尸的血量总和。。就是说植物必须在这段时间内输出这些伤害。。那么单位时间的输出伤害就是斜率了。

  问题就变成了对于若干个点,求从原点到各个点斜率的最大值。

  因为D是固定的,而每次新加入僵尸实际就是把原来的点平移。。并且相对位置关系不变。。。所以显然斜率最大的点一定在凸包上= =

  每次就新加入一个点并维护凸包,然后三分找出凸包上的点与原点连线斜率的最大值(原点与凸包上各个点连线的斜率是单峰的)就好了。。

  数据范围有点吓人。。。但事实上double就够了。。。判断浮点数大小的时候也不用写eps= =

 #include<iostream>
#include<cstdio>
#include<cstring>
#define d double
#define ll long long
using namespace std;
const int maxn=; ll hp[maxn],tr[maxn];
int dl[maxn],l,r;
ll n,m,D,dis;
int i,j,k;
d ans; ll ra;char rx;
inline ll read(){
rx=getchar(),ra=;
while(rx<''||rx>'')rx=getchar();
while(rx>=''&&rx<='')ra*=,ra+=rx-,rx=getchar();return ra;
} inline void add(int x,ll v){for(;x<=n;x+=x&(-x))tr[x]+=v;}
inline ll query(int x){
ll tmp=;
for(;x;x-=x&(-x))tmp+=tr[x];
return tmp;
}
inline d prexl(int x){
return (d)query(x)/(d)(dis+D*(x-i));
}//原点出发的斜率
inline d disxl(int a,int b){
return (d)(query(b)-query(a))/(d)(D*(b-a));
}//两点间斜率
inline d get(int l,int r){
int l1,r1;
while(l+<r){
l1=l+(r-l+)/,r1=r-(l1-l);
if(prexl(dl[l1])<=prexl(dl[r1]))l=l1;else r=r1;
}
for(l1=l+,r1=dl[l];l1<=r;l1++)if(prexl(dl[l1])>prexl(r1))r1=dl[l1];
return prexl(r1);
} int main(){
n=read(),D=read();
l=n+,r=n;
for(i=n;i;i--){
hp[i]=read(),add(i,hp[i]),dis=read();//printf(" %lld %lld\n",hp[i],dis);
// for(j=i;j<=n;j++)printf(" %lld",query(j));puts("");
while(l<r&& disxl(i,dl[l])<=disxl(dl[l],dl[l+]) )l++;
dl[--l]=i;
ans+=get(l,r);
}
printf("%.0lf\n",ans);
return ;
}

写完这题B站排名就233啦

[bzoj3203][Sdoi2013]保护出题人的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 【BZOJ3203】保护出题人(动态规划,斜率优化)

    [BZOJ3203]保护出题人(动态规划,斜率优化) 题面 BZOJ 洛谷 题解 在最优情况下,肯定是存在某只僵尸在到达重点的那一瞬间将其打死 我们现在知道了每只僵尸到达终点的时间,因为僵尸要依次打死 ...

  7. [SDOI2013]保护出题人

    题目 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企图攻击铭铭的家.而你作为SDOI2013的参赛者 ...

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

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

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

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

随机推荐

  1. npm的使用总结

    npm常用命令 npm list 查看当前目录下已安装的包 npm root -g 查看全局安装的包的路径 npm help 查看全部命令 npm update/uninstall moduleNam ...

  2. Java I/O---Properties类(持久化键值对)

    1.Properties类简介 Properties类(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这 ...

  3. Spring之AOP二

    在Spring之AOP一中使用动态代理将日志打印功能注入到目标对象中,其实这就是AOP实现的原理,不过上面只是Java的实现方式.AOP不管什么语言它的几个主要概念还是有必要了解一下的. 一.AOP概 ...

  4. Foreign websites

    [社交] 1.Twitter. It's what's happening. 2.Telegram Messenger 3.Facebook - Log In or Sign Up 4.Instagr ...

  5. 利用VSTS跟Kubernetes进行CI/CD

    准备VSTS管理环境 首先我们需要到www.visualstudio.com下申请好的VSTS账号,然后在账号下创建一个用Git作为代码管理的项目 创建好项目后我们就可以利用git clone将代码库 ...

  6. Java中list<Object[]>、list<Student>、list<Map<String,String>>排序

    1:list<Object[]>的排序   public static void main(String[] args) { // TODO Auto-generated method s ...

  7. MYSQL忘记root密码后如何修改

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...

  8. 第四节 mount /who / mkdir /rmdir /rm /cp /mv /touch /cat /tac/head /tail /more /less / chmod /chown /umask /chattr /lsattr /history /echo

    ***Linux下的文件类型如下: 9 8 7 6 5 4 3 2 1 0- r w x r - x r - x 第9位表示文件类型,可以为p.d.l.s.c.b和-:p表示命名管道文件 -pipe ...

  9. c#程序连接mysql,报"Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='"的解决方案

    =============================================== 20170607_第一次修改                       ccb_warlock === ...

  10. ASP.NET Core文件上传与下载(多种上传方式)

    前言 前段时间项目上线,实在太忙,最近终于开始可以研究研究ASP.NET Core了. 打算写个系列,但是还没想好目录,今天先来一篇,后面在整理吧. ASP.NET Core 2.0 发展到现在,已经 ...