先排序,枚举删一个点,在前面找出最优的另一个点,容易推出斜率方程,平衡树维护凸包。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=3e5+5;
typedef struct node*ptr;
struct node{
ptr i,j,s,t;
ll w,x,y;
node(){w=rand();}
}*b,e[N];
void zag(ptr&o){ptr s=o->j;o->j=s->i,s->i=o,o=s;}
void zig(ptr&o){ptr s=o->i;o->i=s->j,s->j=o,o=s;}
void ins(ptr j,ptr&o=b){
if(!o)o=j,o->s?o->s->t=o:0,o->t?o->t->s=o:0;
else if(j->x>o->x)
{ins(j,o->j);if(o->j->w>o->w)zag(o);}
else if(o->x>j->x)
{ins(j,o->i);if(o->i->w>o->w)zig(o);}
}
void del(ptr j,ptr&o=b){
if(j->x>o->x)del(j,o->j);
else if(o->x>j->x)del(j,o->i);
else if(!o->i)o=o->j;
else if(!o->j)o=o->i;
else if(o->i->w>o->j->w)zig(o),del(j,o->j);
else zag(o),del(j,o->i);
}
ptr pre(ll x,ptr o=b){
ptr s=0;
while(o)x>=o->x?s=o,o=o->j:o=o->i;
return s;
}
ptr suc(ll x,ptr o=b){
ptr s=0;
while(o)o->x>=x?s=o,o=o->i:o=o->j;
return s;
}
ll cal(ptr o,ptr s,ptr t){
ll x1=o->x-s->x,y1=o->y-s->y;
ll x2=t->x-s->x,y2=t->y-s->y;
return x1*y2-x2*y1;
}
void upd(ptr o){
if(ptr&s=o->s=pre(o->x))
while(s->s&&cal(o,s->s,s)<=0)
del(s),s=pre(o->x);
if(ptr&t=o->t=suc(o->x))
while(t->t&&cal(o,t,t->t)<=0)
del(t),t=suc(o->x);
if(!o->s||!o->t)ins(o);
else
if(cal(o->s,o,o->t)>0)ins(o);
}
ll slo(ptr s,ptr t){return(s->y-t->y)/(s->x-t->x);}
ptr sol(ll k,ptr o=b){
if(o->s&&k>slo(o->s,o))return sol(k,o->i);
if(o->t&&slo(o,o->t)>k)return sol(k,o->j);
return o;
}
struct foo{int s,t;}c[N];
bool operator<(foo s,foo t){return s.t*t.s<t.t*s.s;}
int n,m,d;
ll k,q,s[N],r[N];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%d%d",&c[i].s,&d);
c[i].t=(d+m-1)/m;
}
sort(c+1,c+n+1);
for(int i=1;i<=n;++i)
s[i]=s[i-1]+c[i].t;
for(int i=n;i;--i){
k+=(s[i]-1)*c[i].s;
r[i-1]=r[i]+c[i].s;
e[i].x=c[i].t;
e[i].y=(s[i]-1)*c[i].s+c[i].t*r[i];
}
upd(e+1);
for(int i=2;i<=n;++i){
ptr j=sol(c[i].s);
q=max(q,e[i].y+j->y-j->x*c[i].s);
upd(e+i);
}
printf("%lld\n",k-q);
}

BZOJ4700: 适者的更多相关文章

  1. [BZOJ4700]适者(CDQ分治+DP/李超线段树)

    如果没有秒杀,就是经典的国王游戏问题,按t/a从小到大排序即可. 考虑删除两个数i<j能给答案减少的贡献:S[i]*T[i]+P[i-1]*A[i]-A[i]+S[j]*T[j]+P[j-1]* ...

  2. BZOJ4700 适者(贪心+cdq分治+斜率优化)

    首先考虑怎么安排攻击顺序.显然如果攻击了某台兵器就应该一直连续攻击直到将其破坏,破坏所需时间可以直接算出来,设其为b.假设确定了某个破坏顺序,如果交换相邻两个兵器,显然不会对其他兵器造成影响,两种顺序 ...

  3. 题解 【BZOJ4700】适者

    题面 解析 看了好多dalao们的题解,然而还是不明白... 于是在想了半天后,决定自己写一篇题解. step 1 首先,分析题意, 应该还是比较容易想到, 要一直攻击一个兵器, 直到破坏它为止. 因 ...

  4. 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)

    1.游戏适屏的简述和作用 由于市面上安装 Android 系统的手机不断增多,出现了各种分辨率.各种屏幕尺寸的Android 系统手机.为了保证一个游戏或者一个软件能在所有的 Android 手机上正 ...

  5. 什么是 PCB 的压适孔

    引用 AMOBBS 1 再举一个高成本控制的例子:有类PCB产品对孔径要求极度严格,这类孔叫压适孔,这类孔的作用类似于显卡内存条的插座,能刚刚好被元件插上,而且元件不会掉,PTH的压适孔公差要求为-0 ...

  6. 判断团队适不适合使用node

    1.要不要用 2.历史包袱 3.跟进升级 看完scott创业公司使用node,对于一个团队要不要使用node,第一个就是如果承接的项目有很多历史迭代,线上也在稳定的抛,不要轻易的替换,比如很多老代码, ...

  7. Android适屏

    总结一下自己的适屏经验,仅仅希望自己不断进步,不断完好,假设有热心肠的"前辈"指导一下,不胜感激! Android5.0已经出来了,说是这个版本号对Android屏幕适配做了非常多 ...

  8. 一些常用的java书籍的适看范围

    一些常用的java书籍的适看范围 Java三本经典的书: 1.Java核心技术书籍:适合查阅,遇到某个问题不清楚了,可以来此求证. 2.Effective  Java:对java底层的一些涉及内容,书 ...

  9. 适AT maven多个子项目、父项目之间的引用问题

    适AT   maven多个子项目.父项目之间的引用问题 在项目时用到maven管理项目,在一个就项目的基础上开发新的项目:关于子项目和父项目,子项目与子项目之间的调用问题,发现自己存在不足,以下是自己 ...

随机推荐

  1. ArcGIS Engine开发前基础知识(4)

    ArcGIS不同开发方式的比较 关于GIS应用软件的开发,通常有三种方式:C/S架构.网络GIS和移动GIS.ArcGIS平台提供了对三种开发方式的支持,对于采用从C/S架构的大多数开发者来讲,首先想 ...

  2. iOS - ViewController的生命周期

    iOS SDK中提供很多原生的ViewController,大大提高了我们的开发效率:那么下面我们就根据开发中我们常用的ViewController谈一谈它的生命周期: (一)按照结构和用法可以对iO ...

  3. iOS提交AppStore后申请加急审核

    提交审核后进去下面链接申请加急审核链接:https://developer.apple.com/appstore/contact/appreviewteam/index.html 在I would l ...

  4. 【代码笔记】iOS-柱状图

    一,效果图. 二,工程图. 三,代码. RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController ...

  5. ASP.NET MVC的客户端验证:jQuery验证在Model验证中的实现

    在简单了解了Unobtrusive JavaScript形式的验证在jQuery中的编程方式之后,我们来介绍ASP.NET MVC是如何利用它实现客户端验证的.服务端验证最终实现在相应的ModelVa ...

  6. AngularJS 系列 02 - 模块

    引导目录: AngularJS 系列 学习笔记 目录篇 前言: 其实,在上篇文章介绍数据绑定的时候,我们的HelloWorld的代码案例中就已经使用了模块(module).哈哈. 本篇就着重介绍一下a ...

  7. iOS实现渐变色背景(两种方式实现)

    之前做过类似的功能,现在记录一下,来来来... 效果图: 说明=========================== 方法1: 说明:无返回值 用法:直接调用方法.原理是在view的layer层添加. ...

  8. Python Socket 编程——聊天室示例程序

    上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...

  9. 结对项目:代码复审+PSP

    一.代码复审        首先我从代码风格规范和程序修改两方面进行审查. (一)代码风格规范修改 1 . 代码的部分未缩进:在用markdown粘贴代码时,需要后期tab,无形中加大工作量. 2 . ...

  10. transactionManager 以及datasource type解析

    transactionManager 在 MyBatis 中有两种事务管理器类型(也就是 type=”[JDBC|MANAGED]”): JDBC – 这个配置直接简单使用了 JDBC 的提交和回滚设 ...