# 【JZOJ5390】逗气

### Code

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define fo(i,j,k) for(int i=j;i<=k;i++)
#define fd(i,j,k) for(int i=j;i>=k;i--)
#define N 200010
#define inf 10000000000000000ll
#define ll long long
using namespace std;
struct node{
int x,y;
int wz;
}w1[N],w2[N];
bool cmp(node x,node y){
return x.x<y.x;
}
struct tree{
int l,r,o;
}tr[N];
struct line{
int k,b;
ll f(int x){
return (ll)k*x+b;
}
}ln[N];
int cc=1,tot=0;
void pdl(int v){
if(!tr[v].l) tr[v].l=++cc;
}
void pdr(int v){
if(!tr[v].r) tr[v].r=++cc;
}
double meet(int x,int y){
return (ln[y].b-ln[x].b)*1.0/(ln[x].k-ln[y].k);
}
void change(int v,int l,int r,int x)
{
if(!tr[v].o) {tr[v].o=x;return;}
int o=tr[v].o;
double p=meet(x,o);
int mid=(l+r)/2;
if(p<=l*1.0 || p>=r*1.0 || ln[x].k==ln[o].k)
{
if(ln[x].f(mid)>ln[o].f(mid)) tr[v].o=x;
return;
}
if(p<=mid*1.0)
{
pdl(v);
if(ln[x].k>ln[o].k) tr[v].o=x,change(tr[v].l,l,mid,o);
else change(tr[v].l,l,mid,x);
}
else
{
pdr(v);
if(ln[x].k<ln[o].k) tr[v].o=x,change(tr[v].r,mid+1,r,o);
else change(tr[v].r,mid+1,r,x);
}
}
ll find(int v,int l,int r,int x)
{
if(!v) return -inf;
int o=tr[v].o;
if(!o) return -inf;
ll tmp=ln[o].f(x);
if(l==r) return tmp;
int mid=(l+r)/2;
if(x<=mid) return max(tmp,find(tr[v].l,l,mid,x));
else return max(tmp,find(tr[v].r,mid+1,r,x));
}
int lf=1;
ln[++tot].k=lf*w1[x].x,ln[tot].b=w1[x].y;
}
ll z[N];
int main()
{
freopen("gas.in","r",stdin);
freopen("gas.out","w",stdout);
int n,m;
scanf("%d %d",&n,&m);
int mx=0;
fo(i,1,n) scanf("%d %d",&w1[i].x,&w1[i].y),mx=max(mx,max(w1[i].x,w1[i].y));
fo(i,1,m) scanf("%d %d",&w2[i].x,&w2[i].y),w2[i].wz=i,mx=max(mx,max(w2[i].x,w2[i].y));
sort(w1+1,w1+n+1,cmp),sort(w2+1,w2+m+1,cmp);
int p=0;
fo(i,1,m)
{
while(w1[p+1].x<=w2[i].x && p<n) p++,add(p),change(1,1,mx,tot);
int wz=w2[i].wz;
z[wz]=max(z[wz],find(1,1,mx,w2[i].y)-(ll)w2[i].x*w2[i].y);
}
lf=-1,p=n+1;
memset(tr,0,sizeof(tr)),tot=0,cc=1;
fd(i,m,1)
{
while(w1[p-1].x>=w2[i].x && p>1) p--,add(p),change(1,1,mx,tot);
int wz=w2[i].wz;
z[wz]=max(z[wz],find(1,1,mx,w2[i].y)+(ll)w2[i].x*w2[i].y);
}
fo(i,1,m) printf("%lld\n",z[i]);
}


#### [JZOJ5390]【NOIP2017提高A组模拟9.26】逗气

2017-09-28 19:43:46

#### 【团队介绍】小逗比们的介绍篇

2014-10-12 22:41:56

#### 总算搞定了,乐逗游戏校招面试经验汇总

2016-10-23 19:38:07

#### 逗比的验证码，有没有难道不一样吗？

2017-06-07 15:38:03

#### 逗女友开心的小程序

2014年03月06日 265B 下载

#### 逗女孩开心的 小程序

2012年09月21日 881KB 下载

#### [hackinglab] 脚本关5 逗比验证码第一期

2017-05-29 15:43:45

#### [hackinglab] 逗比验证码第二期

2017-05-29 16:34:35

#### 一个恶搞的程序·适合逗女朋友和同事同学开玩笑

2009年02月20日 252KB 下载

#### smc气路设计工具

2013年09月27日 3.54MB 下载