题目传送门(内部题150)


输入格式

  第一行两个整数$N,Q$。
  接下来的$N$行,每行两个整数$a_i,b_i$。
  接下来的$Q$行,每行一个整数$x$。


输出格式

  对于每个询问,输出一行一个整数表示答案。


样例

样例输入:

2 4
3 0
4 -2
-1
0
1
2

样例输出:

6
0
3
12


数据范围与提示

  每个测试点$10$分,共$10$个测试点:

对于所有的数据,有:$1\leqslant N,Q,|a_i|,|b_i|,|x|<32323$。


题解

发现式子中没有$c_i$,所以可以把一个$x$提出来,于是就变成了一个一次函数,而对于$x$的正负分类讨论就好了。

对于一次函数,可以用单调栈维护凸包找位于凸包上的$a_i,b_i$,然后对于每一组询问二分答案即可。

时间复杂度:$\Theta((N+Q)\log N)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
struct rec{int a,b;}e[500001],S[500001],L[500001],R[500001];
int N,Q;
int top,l,r;
bool cmp1(rec a,rec b){return a.a==b.a?a.b<b.b:a.a<b.a;}
bool cmp2(rec a,rec b){return a.a==b.a?a.b>b.b:a.a<b.a;}
double ask(rec a,rec b){return(double)(a.b-b.b)/(b.a-a.a);}
int main()
{
scanf("%d%d",&N,&Q);
for(int i=1;i<=N;i++)scanf("%d%d",&e[i].a,&e[i].b);
sort(e+1,e+N+1,cmp1);
S[0].a=0x3f3f3f3f;
for(int i=1;i<=N;i++)
{
while(top&&(S[top].a==e[i].a||ask(S[top],e[i])<0))top--;
while(top>1&&ask(S[top-1],S[top])>ask(S[top],e[i]))top--;
S[++top]=e[i];
}
for(int i=1;i<=top;i++)L[++l]=S[i];
sort(e+1,e+N+1,cmp2);top=0;
for(int i=1;i<=N;i++)
{
while(top&&(S[top].a==e[i].a||ask(S[top],e[i])>0))top--;
while(top>1&&ask(S[top-1],S[top])<ask(S[top],e[i]))top--;
S[++top]=e[i];
}
for(int i=1;i<=top;i++)R[++r]=S[i];
while(Q--)
{
int x;scanf("%d",&x);
if(!x){puts("0");continue;}
if(x>0)
{
int lft=1,rht=l,res=1;
while(lft<=rht)
{
int mid=(lft+rht)>>1;
if(ask(L[mid-1],L[mid])<x){lft=mid+1;res=mid;}
else rht=mid-1;
}
printf("%lld\n",1LL*L[res].a*x*x+L[res].b*x);
}
else
{
int lft=1,rht=r,res=1;
while(lft<=rht)
{
int mid=(lft+rht)>>1;
if(ask(R[mid-1],R[mid])<x)rht=mid-1;
else{lft=mid+1;res=mid;}
}
printf("%lld\n",1LL*R[res].a*x*x+R[res].b*x);
}
}
return 0;
}

rp++

最新文章

  1. 6、软件配置工程师要阅读的书籍 - IT软件人员书籍系列文章
  2. Hadoop生态系统
  3. Xshell下VI打开文件中文乱码解决
  4. [POJ2182]Lost Cows(树状数组,二分)
  5. AngularJs记录学习01
  6. 使用 Google Fonts 为网页添加美观字体
  7. WPF密码框中禁止复制、粘贴
  8. 【POJ1470】Closest Common Ancestors
  9. POJ 3128 Leonardo&#39;s Notebook [置换群]
  10. .NET Core2.0+MVC 用session,cookie实现的sso单点登录
  11. Order Management Suite - Pricing and Availability Form Library
  12. centos7服务器无GUI情况下安装使用Xvfb、selenium、chrome和selenium-server
  13. 【持续更新】JAVA面向对象多线程编程的一些tips
  14. Centos7 MongoDB-3.4
  15. (Review cs231n) Gradient Vectorized
  16. CSS的再深入(更新中&#183;&#183;&#183;)
  17. Git下的.DS_Store文件
  18. js中apply的用法(转)
  19. 图结构练习——判断给定图是否存在合法拓扑序列(sdutoj)
  20. leetcode434

热门文章

  1. hdu 1502 大数dp
  2. Angular7如何动态刷新Echarts图表
  3. Sharepoint2010设置自定义母版页
  4. Advanced Installer 关于桌面的快捷方式。
  5. .net core默认不支持gb2312
  6. base64转换成文件图片
  7. 【jekins】tomcat+jenkins
  8. Scala语言基础
  9. 微信小程序双向绑定
  10. pandas库的一些操作