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

#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. low security dvwa--SQL Injection

    登录dvwa后,点击左边的"SQL Injection",出现以下界面: 下面做一些学习总结. 第一步:用 "order by n" 获得表中的属性列数,它的意 ...

  2. Autodesk View and Data API二次开发学习指南

    什么是View and Data API? 使用View and Data API,你可以轻松的在网页上显示大型三维模型或者二维图纸而不需要安装任何插件.通过View and Data API,你可以 ...

  3. OC泛型

    OC泛型 泛型是程序设计语言的一种特性,他主要是为了限制类型的,比如OC中的数组,你可以限制他里面装的是NSString类型,泛型的话JAVA和C++都有的,大家要是对泛型不了解的话可以去百度一下. ...

  4. koala预编译工具的使用

    Koala是一个开源的预处理语言图形编译工具,目前已支持Less.Sass.Compass与CoffeeScript. 安装Koala 在Koala官网根据你的系统平台下载对应的版本.Linux系统要 ...

  5. (转)C# 选择正确的集合

    原文: http://www.cnblogs.com/luminji/archive/2011/03/24/1993393.html 要选择正确的集合,我们首先要了解一些数据结构的知识.所谓数据结构, ...

  6. [AlwaysOn Availability Groups]监控AG性能

    监控AG性能 AG的性能的性能方面,在关键任务数据库上进行语句级维护性能是很重要的.理解AG如何传输日志到secondary副本对评估RTO和RPO,表明AG是否性能不好. 1. 数据同步步骤 为了评 ...

  7. Oracle基础——学习笔记

    一[用户]sys\system\sysman\scott 1.查看数据库所有用户(dba_users数据字典): select username from dba_users; 2.查看当前用户: s ...

  8. Windows下Java环境配置,tomcat安装

    问题描述:在Windows下面做Java web相关的项目的时候,Java和tomcat是基础,这里记载一下Java环境的配置以及tomcat的安装和配置. 使用工具:Windows.jdk安装包.t ...

  9. 7、二种 为二个不同的子网配置DHCP服务器(中继代理服务器)

    环境如下:        (参考之前,保证二个子网可以互相ping通) 虚拟机vm1        192.168.170.3                    VMnet8 (NAT模式) 虚拟 ...

  10. [转]OAuth 2.0 - Authorization Code授权方式详解

    本文转自:http://www.cnblogs.com/highend/archive/2012/07/06/oautn2_authorization_code.html I:OAuth 2.0 开发 ...