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);
}

  

时间: 2024-12-15 08:11:56

BZOJ4700: 适者的相关文章

钙蝉洼畴淳荆匣缆兢virdfSR1

IoC和AOP可谓是后台开发入门必学的知识(Spring相关),但这两者都仅仅只是概念而已,并非具体技术实现,同样的,Android也可以使用IoC和AOP,之前已经写过如何在Android开发中使用AOP了,有兴趣的朋友可以看我之前的博客(顺便点个关注吧),所以,本文主题便是IoC. 控制反转(Inversion of Control,英文缩写为IoC)是框架的重要特征,并非面向对象编程的专用术语.它包括依赖注入(Dependency Injection,简称DI)和依赖查找(Dependen

Android万能分辨率适应法

在Android开发中比较头疼的是Android的分辨率问题,那么这里给大家介绍个万能办法,这个办法的优点是可以实现万能适应,给开发和美工设计提供了依据,但是对开发来说代码量也不少,具体办法你听我来说: (1)获取屏幕的尺寸 1 WindowManager windowManager = (WindowManager) 2          getSystemService(Context.WINDOW_SERVICE); 3  Display d = windowManager.getDefa

使用AutoLayout布局适配时,如何提前获得AutoLayout完成适配后的子控件的真实frame

当我们使用AutoLayout做适配时,可能会有这样的需求,就是在想在适配完成前就取得子控件的真实frame,来做一些操作.比如我们想把一个正方形的UIImageView剪成一个圆形,这时候就需要这么做 self.imageView.layer.cornerRadius = self.imageView.frame.size.width / 2; self.imageView.clipsToBounds = YES 之前我们只要把上面两句放在layoutSubviews: 方法中设置即可,因为在

(五)分数阶微分方程的解法及其适定性问题介绍

a ) 为此介绍一些常见的变换及其性质Laplace变换的定义为$$ \mathscr{L} \{f(t)\}=\int_{0}^{\infty}f(t)e^{-st}dt$$Laplace反演变换公式为$$\mathscr{L}^{-1}F(s)=\int_{0}^{\infty}F(s)e^{st}ds $$定义卷积$$f(t)\ast g(t)=\int_{0}^{t}f(t-\tau)g(\tau)d\tau=\int_{0}^{t}f(t)g(t-\tau)d\tau=g(t) \as

陕西实行经适房限价商品住房并轨运行

陕西实行经适房限价商品住房并轨运行 近日,省住建厅出台方案,将有序推进经济适用住房.限价商品住房并轨运行,进一步完善保障性住房供应结构,健全保障性住房分配管理的长效机制. "两房"并轨统称购置型保障房 方案指出,经济适用住房和限价商品住房并轨运行后统称为购置型保障房.在原有政策的基础上,各市区应根据住房保障工作实际情况,积极完善相关政策,确保并轨后已轮候保障对象的利益不受损害. 并轨后原经济适用住房和限价商品住房的相关规划目标和年度计划指标,统一并入购置型保障房规划目标和年度计划指标.

北京邀请赛发言稿 大牛董适.cpp

大家好,我是北京航空航天大学的董适.很荣幸能代表选手站在这里发言,与大家分享我的经历. 刚开始来到大学的时候,我一心向学,本着"好好学习,天天向上,为校争光,不搞对象"的信念,想在大学一展宏图.可是四年下来,发现我这四条一个都没有达成.因为高中OI的挫败,我在刚上大学的时候就选择了ACM这条"不归路".一开始是因为高中的遗憾,到后来就完全是因为信念和兴趣慢慢一直搞到现在. 跟众位大牛不一样,我的道路看起来却没那么辉煌,稍微认识的人比较多也是因为比较爱水群.那时候的我

ImageView使用(适屏、缩放功能)

1.适屏 提取手机的图片库,并且进行选择图片的功能: Button onClick: Intent intent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);// 打开手机的图片库 startActivityForResult(intent, IMAGE_SELECT); 处理图片,按照手机的屏幕大小显示: if (requestCode == I

Android适屏

总结一下自己的适屏经验,肯定有很多不足,这和能力有关,只希望自己不断进步,不断完善,如果有热心肠的"前辈"指导一下,不胜感激! Android5.0已经出来了,说是这个版本对Android屏幕适配做了很多工作,不过对于我这种慢性子的人,我还是耐心的拭目以待吧,5.0之前已经有很多分辨率,刚开始做Android的时候头都大了,不过慢慢的还是积累了一些适屏的经验,在此总结一下. 一.使用资源标识 1.分辨率(密度)标识符适配 Android的分辨率有四大类,以后还会不会更多呢,我也不知道,

配适器模式

1.什么是配适器模式? 当我有一个类,这个类哪方面都不错 我想用这个类做一点事.但是这个类这种事必须要符合一种规范,而我为了防止出现其他问题 一般都不能直接在这个类基础上直接修改 这时,就用到配适器,吧这个类用配适器一配,让他可以满足这种规范 配适器的三种模式,类配适器,对象配适器,接口配适器 二.类配适器 配适器adapter必须继承我这个要被配适的类adaptee 还要实现目标所要求的接口 我这里有一个source类 public class Source{ public void prin