Description

Input

Output

Sample Input

3 2
1 8
4 5
7 9
3 1
5 2

Sample Output

6
5

Data Constraint

Hint

第1 个聚逗阵的逗阵之灵是第1 个
第2 个聚逗阵的逗阵之灵是第3 个

Solution

  • 先考虑选的聚集点都在当前聚逗阵左边的情况,

  • 对于第 ii 个聚逗阵,且选第 jj 个聚集点 比 选第 kk 个聚集点,则有:

    bj−ci∗di+aj∗di>bk−ci∗di+ak∗di

    b_j-c_i*d_i+a_j*d_i>b_k-c_i*d_i+a_k*d_i

  • 整理可得:

    bj−bkaj−ak<−di

    \frac{b_j-b_k}{a_j-a_k}

  • 这便是斜率的形式,用单调队列维护即可。

  • 每次在队列里二分查找斜率小于等于 −di-d_i 的第一个就是答案了。

  • 对于选的聚集点都在当前聚逗阵右边的情况,倒过来处理即可,对于一左一右的情况已经被包含。

Code

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long LL;
const int N=2e5+1;
struct data
{LL x,y,z;
}a[N],b[N],c[N];
int pos;
int q[N];
LL ans[N];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
inline LL max(LL x,LL y)
{return x>y?x:y;
}
inline bool cmp(data x,data y)
{return x.x<y.x;
}
inline double pd(int x,int y)
{return (b[x].y-b[y].y)*1.0/(b[x].x-b[y].x);
}
inline LL get1(data x)
{int l=2,r=q[0],k=1;while(l<=r){int mid=(l+r)>>1;if(pd(q[mid],q[mid-1])>=-x.y) l=mid+1,k=mid; else r=mid-1;}return a[b[q[k]].z].y-abs(a[b[q[k]].z].x-x.x)*x.y;
}
inline LL get2(data x)
{int l=2,r=q[0],k=1;while(l<=r){int mid=(l+r)>>1;if(pd(q[mid],q[mid-1])<=x.y) l=mid+1,k=mid; else r=mid-1;}return a[b[q[k]].z].y-abs(a[b[q[k]].z].x-x.x)*x.y;
}
int main()
{int n=read(),m=read();for(int i=1;i<=n;i++) a[a[i].z=i].x=read(),a[i].y=read(),b[i]=a[i];for(int i=1;i<=m;i++) c[c[i].z=i].x=read(),c[i].y=read();sort(b+1,b+1+n,cmp);sort(c+1,c+1+m,cmp);for(int i=pos=1;i<=m;i++){while(pos<=n && c[i].x>=b[pos].x){while(q[0]>1 && pd(pos,q[q[0]-1])>=pd(q[q[0]],q[q[0]-1])) q[0]--;q[++q[0]]=pos++;}ans[c[i].z]=max(ans[c[i].z],get1(c[i]));}q[0]=0,pos=n;for(int i=m;i;i--){while(pos && c[i].x<=b[pos].x){while(q[0]>1 && pd(pos,q[q[0]-1])<=pd(q[q[0]],q[q[0]-1])) q[0]--;q[++q[0]]=pos--;}ans[c[i].z]=max(ans[c[i].z],get2(c[i]));}for(int i=1;i<=m;i++) printf("%lld\n",ans[i]);return 0;
}

JZOJ 5390. 【NOIP2017提高A组模拟9.26】逗气相关推荐

  1. JZOJ 5389. 【NOIP2017提高A组模拟9.26】解梦

    Description DYY 很善于解梦,昨晚,他梦见自己来到了一个高度发达的国度. 众所周知,我们现在有极为常用的三级运算,+..^.其中,a*b=a+a+a+-+a(b 个a),a^b=a*a* ...

  2. JZOJsenior.5389.【NOIP2017提高A组模拟9.26】解梦

    题目描述 Description DYY 很善于解梦,昨晚,他梦见自己来到了一个高度发达的国度. 众所周知,我们现在有极为常用的三级运算,+..^.其中,a*b=a+a+a+-+a(b 个a),a^b ...

  3. 【jzoj5389】【NOIP2017提高A组模拟9.26】【解梦】

    description DYY 很善于解梦,昨晚,他梦见自己来到了一个高度发达的国度. 众所周知,我们现在有极为常用的三级运算,+..^.其中,a*b=a+a+a+-+a(b 个a),a^b=a*a* ...

  4. JZOJ 5372. 【NOIP2017提高A组模拟9.17】猫

    Description 信息组最近猫成灾了!隔壁物理组也拿猫没办法.信息组组长只好去请神刀手来帮他们消灭猫.信息组现在共有n 只猫(n 为正整数),编号为1 到n,站成了一个环,第i 只猫的左边是第i ...

  5. JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation

    Description Input Output Sample Input 7 2 2343223 4 1 2234 Sample Output 2243233 2334 Data Constrain ...

  6. JZOJ 5371. 【NOIP2017提高A组模拟9.17】组合数问题

    Description 定义"组合数"S(n,m)代表将n 个不同的元素拆分成m 个非空集合的方案数.举个例子,将{1,2,3}拆分成2 个集合有({1},{2,3}),({2},{1,3}),({3 ...

  7. JZOJ 100047. 【NOIP2017提高A组模拟7.14】基因变异

    Description 21 世纪是生物学的世纪,以遗传与进化为代表的现代生物理论越来越多的 进入了我们的视野. 如同大家所熟知的,基因是遗传因子,它记录了生命的基本构造和性能. 因此生物进化与基因的 ...

  8. JZOJ 100041. 【NOIP2017提高A组模拟7.12】列车调度

    Description Input Output Sample Input Sample1: 3 1 2 3 Sample2: 9 1 3 2 4 8 6 9 5 7 Sample Output Sa ...

  9. JZOJ 100030. 【NOIP2017提高A组模拟7.8】为了爱情

    Description Input 输入文件第一行包含一个正整数 k.之后是 k 组测试用例. 每组测试用例的第一行为一个整数 n.接下来 n 行,每行 n 个以空格隔开的数,用来 描述棋盘的初始状态 ...

最新文章

  1. 组策略(八)使用使用自定义RealVNC adm模板对域内工作站设置统一标准设置
  2. 将js进行到底:node学习10
  3. 【MM配置】评估和账户确定(Valuation Account Determination) - 2
  4. 【渝粤教育】国家开放大学2019年春季 2773特种动物养殖 参考试题
  5. 生成六位验证码python代码
  6. python atm取款系统_基于python的ATM(自动取款机)项目
  7. 【MySQL】【翻译】 基于GTID追踪的自适应路由查询
  8. Java中getclass(),class()与iinstanceof的区别与联系
  9. Linux SMB和NFS文件共享
  10. mysql提高count_mysql count提高方法总结
  11. 未来的工作都被计算机代替,未来10年,50%的工作将被机器取代?而这些职业却无法被取代...
  12. 新云php修改,MySQL_新云CMS防采集的代码修改,列表页修改: 打开INC目录下Ne - phpStudy...
  13. PC端页面如何调用QQ进行在线聊天?
  14. 手游脚本_雷电模拟器
  15. ps彩色照片变黑白照片
  16. IBM J9 Java 虚拟机正式开源;PyPI 官方库被发现混入了名字相似的恶意模块
  17. 计算机办公软件应用教学总结,2018年office办公软件教学总结(精选)
  18. c语言入门——三子棋(N子棋)
  19. MACD背离指标公式
  20. 超宽带(UWB)无线通信技术介绍

热门文章

  1. Tensorflow 错误总结:ImportError: cannot import name add_newdocs.
  2. Python Tutorial(六):模块
  3. shfflenetv2代码解读
  4. 两个年月日怎么相减_会议记录应该怎么记?看这里
  5. 使用vl_sift提取图像特征
  6. Caffe 学习笔记1
  7. Coursera吴恩达《序列模型》课程笔记(3)-- Sequence models Attention mechanism
  8. 用ConfigParser模块读写conf配置文件
  9. bash-shell高级编程--条件判断
  10. linux中fork()函数与vfork()函数的区别