[CSP-S模拟测试]:A(单调栈维护凸包+二分答案)
题目传送门(内部题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++
[CSP-S模拟测试]:A(单调栈维护凸包+二分答案)的更多相关文章
- 【bzoj5089】最大连续子段和 分块+单调栈维护凸包
题目描述 给出一个长度为 n 的序列,要求支持如下两种操作: A l r x :将 [l,r] 区间内的所有数加上 x : Q l r : 询问 [l,r] 区间的最大连续子段和. 其中,一 ...
- Lost My Music:倍增实现可持久化单调栈维护凸包
题目就是求树上每个节点的所有祖先中(ci-cj)/(dj-di)的最小值. 那么就是(ci-cj)/(di-dj)的最大值了. 对于每一个点,它的(ci,di)都是二维坐标系里的一个点 要求的就是祖先 ...
- HDU 5033 (单调栈维护凸包) Building
题意: 一个人在x轴上,他的左右两侧都有高楼,给出楼的横坐标Xi和高度Hi还有人的位置pos,求人所能看到的天空的最大角度. 分析: 将建筑物和人的位置从左到右排序,对于每个位置利用栈求一次人左边建筑 ...
- HDU 5033 Building(单调栈维护凸包)
盗张图:来自http://blog.csdn.net/xuechelingxiao/article/details/39494433 题目大意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度, ...
- [CSP-S模拟测试]:毛三琛(随机化+二分答案)
题目传送门(内部题69) 输入格式 第一行正整数$n,P,k$.第二行$n$个自然数$a_i$.$(0\leqslant a_i<P)$. 输出格式 仅一个数表示最重的背包的质量. 样例 样例输 ...
- CF535E Tavas and Pashmaks 单调栈、凸包
传送门 题意:有一场比赛,$N$个人参加.每个人有两种参数$a,b$,如果存在正实数$A,B$使得$\frac{A}{a_i} + \frac{B}{b_i}$在$i=x$处取得最大值(可以有多个最大 ...
- [CSP-S模拟测试]:导弹袭击(数学+凸包+单调栈)
题目背景 $Guess$准备向敌军阵地发起进攻了!$Guess$的武器是自动制导导弹.然而在机房是不允许游戏的,所以班长$XZY$对游戏界面进行了降维打击,结果... 题目描述 众所周知,环境因素对导 ...
- LOJ #2769 -「ROI 2017 Day 1」前往大都会(单调栈维护斜率优化)
LOJ 题面传送门 orz 斜率优化-- 模拟赛时被这题送走了,所以来写篇题解( 首先这个最短路的求法是 trivial 的,直接一遍 dijkstra 即可( 重点在于怎样求第二问.注意到这个第二问 ...
- bzoj1007: [HNOI2008]水平可见直线 单调栈维护凸壳
在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例如,对于直线:L1:y=x; L2:y=-x; L3 ...
随机推荐
- 获取windows进程信息及CListCtrl控件(List Control)练习
环境:VS2010/MFC/对话框 效果图: 目录: 1. 关于windows进程信息获取 2. CListCtrl的使用 ------------------------------------ ...
- 设置自己的bat运行文件-自己用,随时扩展
start "" "E:\SEST_H5" start "" "C:\Program Files\Sublime Text 3\s ...
- elmentUI为table中的单元格添加事件
<el-main> <el-tabs v-model="curTab" type="card"> <!-- tab签 --> ...
- C++ STL 之 list
#include <list> #include <iostream> using namespace std; // 打印list元素 void PrintList(list ...
- 安卓开发之sql语句增删改查2(利用谷歌封装好的API进行增删改查)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- Java Object对象中的wait,notify,notifyAll的理解
wait,notify,notifyAll 是定义在Object类的实例方法,用于控制线程状态,在线程协作时,大家都会用到notify()或者notifyAll()方法,其中wait与notify是j ...
- Redis的最常见面试问题
Redis的那些最常见面试问题[转] 1.什么是redis? Redis 是一个基于内存的高性能key-value数据库. 2.Reids的特点 Redis本质上是一个Key-Value类型的内存数据 ...
- 远程操控批量复制应用(scp/pssh/pscp.pssh/rsync/pslurp)
scp命令: scp [options] SRC... DEST/两种方式: scp [options] [user@]host:/sourcefile /destpath scp [options] ...
- Hadoop_17_MapRduce_案例2_实现用户手机流量统计(ReduceTask并行度控制)
需求:1.统计每一个用户(手机号)所耗费的总上行流量.下行流量,总流量 1.数据如下:保存为.dat文件(因为以\t切分数据,文件格式必须合适) 1363157985066 13726230503 0 ...
- TcxComboBoxProperties下拉框填充
原文地址:https://www1.devexpress.com/Support/Center/Question/Details/CQ30369 Actually, the corresponding ...