BZOJ4700: 适者
先排序,枚举删一个点,在前面找出最优的另一个点,容易推出斜率方程,平衡树维护凸包。
#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: 适者的更多相关文章
- [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]* ...
- BZOJ4700 适者(贪心+cdq分治+斜率优化)
首先考虑怎么安排攻击顺序.显然如果攻击了某台兵器就应该一直连续攻击直到将其破坏,破坏所需时间可以直接算出来,设其为b.假设确定了某个破坏顺序,如果交换相邻两个兵器,显然不会对其他兵器造成影响,两种顺序 ...
- 题解 【BZOJ4700】适者
题面 解析 看了好多dalao们的题解,然而还是不明白... 于是在想了半天后,决定自己写一篇题解. step 1 首先,分析题意, 应该还是比较容易想到, 要一直攻击一个兵器, 直到破坏它为止. 因 ...
- 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)
1.游戏适屏的简述和作用 由于市面上安装 Android 系统的手机不断增多,出现了各种分辨率.各种屏幕尺寸的Android 系统手机.为了保证一个游戏或者一个软件能在所有的 Android 手机上正 ...
- 什么是 PCB 的压适孔
引用 AMOBBS 1 再举一个高成本控制的例子:有类PCB产品对孔径要求极度严格,这类孔叫压适孔,这类孔的作用类似于显卡内存条的插座,能刚刚好被元件插上,而且元件不会掉,PTH的压适孔公差要求为-0 ...
- 判断团队适不适合使用node
1.要不要用 2.历史包袱 3.跟进升级 看完scott创业公司使用node,对于一个团队要不要使用node,第一个就是如果承接的项目有很多历史迭代,线上也在稳定的抛,不要轻易的替换,比如很多老代码, ...
- Android适屏
总结一下自己的适屏经验,仅仅希望自己不断进步,不断完好,假设有热心肠的"前辈"指导一下,不胜感激! Android5.0已经出来了,说是这个版本号对Android屏幕适配做了非常多 ...
- 一些常用的java书籍的适看范围
一些常用的java书籍的适看范围 Java三本经典的书: 1.Java核心技术书籍:适合查阅,遇到某个问题不清楚了,可以来此求证. 2.Effective Java:对java底层的一些涉及内容,书 ...
- 适AT maven多个子项目、父项目之间的引用问题
适AT maven多个子项目.父项目之间的引用问题 在项目时用到maven管理项目,在一个就项目的基础上开发新的项目:关于子项目和父项目,子项目与子项目之间的调用问题,发现自己存在不足,以下是自己 ...
随机推荐
- scrollToItemAtIndexPath: atScrollPosition: animated:
oh my god 今天死在scrollToItemAtIndexPath: atScrollPosition: animated:方法上面,scrollPosition这个参数控制cell具体停留在 ...
- android Broadcast介绍
在Android中,Broadcast是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一类组件.发送Broadca ...
- Laravel大型项目系列教程(二)之用户管理
Laravel大型项目系列教程(二) 一.前言 本节教程将大概实现用户的注册.修改个人信息.管理用户功能. 二.Let's go 1.创建用户注册视图 $ php artisan generate:v ...
- 随笔分类 - [C#6] 新增特性
C#6.0中引入的基本特性总结 [C#6] 7-索引初始化器 摘要: 0. 目录 C#6 新增特性目录 1. 老版本的代码 早C#3中引入的集合初始化器,可是让我们用上面的语法来在声明一个字典或者集合 ...
- sublime 相关配置
安转插件:案例格式化HTML代码,需要安装插件,具体安装步骤如下: 1.打开菜单->首选项->插件控制,输入 install package 2.等待程序进入插件管理功能,再输入插件名称: ...
- Python学习笔记7-高级迭代器
将任何字符串作为python表达式求值: eval()方法: eval(source[, globals[, locals]]) -> value Evaluate the source in ...
- Java基础知识笔记(八:集合类)
目录 1 集合类简介 2 List介绍及简单使用 2.1 LinkedList介绍及简单使用 2.2 ArrayList介绍及简单使用 2.3 Vector介绍及简单使用 2.3.1 S ...
- 《InsideUE4》UObject(二)类型系统概述
曾子曰:吾日三省吾身--为人谋而不忠乎?与朋友交而不信乎?传不习乎? 引言 上一篇我们谈到了在游戏引擎,或者在程序和高级编程语言中,设计一个统一对象模型得到的好处,和要付出的代价,以及在UE里是怎么对 ...
- 安装Windows更新程序遇到错误:0x80070422
看看服务那里 windows update服务是不是被禁用了? 还有一个问题可能是由于Windows Modules Installer被禁用了.
- [bzoj3224][tyvj1728][普通平衡树] (pb_ds库自带红黑树)
Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相 ...