HDU - 5033 Building (单调栈+倍增)
题意:有一排建筑,每座建筑有一定的高度,宽度可以忽略,求在某点的平地上能看到天空的最大角度。
网上的做法基本都是离线的...其实这道题是可以在线做的。
对于向右能看到的最大角度,从右往左倍增维护每个时刻的单调栈(凸壳),对于每个询问,先二分找到它右面的第一个建筑的位置,然后在对应的凸壳上倍增找到切点即可。
向左看把x坐标对称一下就行。
复杂度$O(nlogn)$
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
const db pi=acos(-);
const int N=1e5+,inf=0x3f3f3f3f;
int n,m,ka;
struct P {
db x,y;
P operator-(const P& b) {return {x-b.x,y-b.y};}
db rad() {return atan2(y,x);}
bool operator<(const P& b)const {return x<b.x;}
} a[N];
struct D {
P p,v;
bool operator<(const D& b)const {return p<b.p;}
};
db cross(const P& a,const P& b) {return a.x*b.y-a.y*b.x;}
struct Solver {
int F[N][];
D b[N];
void build(P* a) {
b[n]= {a[n],{,-}};
for(int i=; i<n; ++i)b[i]= {a[i],a[i+]-a[i]};
for(int k=; k>=; --k)F[n][k]=n;
for(int i=n-; i>=; --i) {
int j=i+;
if(cross(b[j].p-a[i],b[j].v)>) {
for(int k=; k>=; --k)
if(cross(b[F[j][k]].p-a[i],b[F[j][k]].v)>)j=F[j][k];
j=F[j][];
}
F[i][]=j;
b[i].v=a[j]-a[i];
for(int k=; k<; ++k)F[i][k]=F[F[i][k-]][k-];
}
}
db qry(P px) {
int i=lower_bound(b+,b++n,(D) {px, {,}})-b;
if(cross(b[i].p-px,b[i].v)>) {
for(int k=; k>=; --k)
if(cross(b[F[i][k]].p-px,b[F[i][k]].v)>)i=F[i][k];
i=F[i][];
}
return (b[i].p-px).rad()*/pi;
}
} solver[];
int main() {
int T;
for(scanf("%d",&T); T--;) {
printf("Case #%d:\n",++ka);
scanf("%d",&n);
for(int i=; i<=n; ++i)scanf("%lf%lf",&a[i].x,&a[i].y);
a[++n]= {~inf,},a[++n]= {inf,};
sort(a+,a++n);
solver[].build(a);
for(int i=; i<=n; ++i)a[i]= {-a[i].x,a[i].y};
reverse(a+,a++n);
solver[].build(a);
for(scanf("%d",&m); m--;) {
db x;
scanf("%lf",&x);
printf("%.10f\n",-(solver[].qry({x,})+solver[].qry({-x,})));
}
}
return ;
}
HDU - 5033 Building (单调栈+倍增)的更多相关文章
- HDU 5033 Building(单调栈)
HDU 5033 Building(单调栈) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5033 Description Once upon a ti ...
- hdu 5033 Building (单调栈 或 暴力枚举 )
Description Once upon a time Matt went to a small town. The town was so small and narrow that he can ...
- HDU 5033 Building(单调栈维护凸包)
盗张图:来自http://blog.csdn.net/xuechelingxiao/article/details/39494433 题目大意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度, ...
- hdu - 5033 - Building(单调栈)
题意:N 幢楼排成一列(1<=N<=10^5),各楼有横坐标 xi(1<=xi<=10^7) 以及高度 hi(1<=hi<=10^7),在各楼之间的Q个位置(1&l ...
- HDU 5033 Building(北京网络赛B题) 单调栈 找规律
做了三天,,,终于a了... 11724203 2014-09-25 09:37:44 Accepted 5033 781MS 7400K 4751 B G++ czy Building Time L ...
- HDU 5033 Building (维护单调栈)
题目链接 题意:n个建筑物,Q条询问,问所在的位置,看到天空的角度是多少,每条询问的位置左右必定是有建筑物的. 思路 : 维护一个单调栈,将所有的建筑物和所有的人都放到一起开始算就行,每加入一个人,就 ...
- hdu 5033 模拟+单调优化
http://acm.hdu.edu.cn/showproblem.php?pid=5033 平面上有n个建筑,每个建筑由(xi,hi)表示,m组询问在某一个点能看到天空的视角范围大小. 维护一个凸包 ...
- Largest Rectangle in a Histogram HDU - 1506 (单调栈)
A histogram is a polygon composed of a sequence of rectangles aligned at a common base line. The rec ...
- HDU5033 building 单调栈+计算几何
正解:单调栈 解题报告: 哇生气辽QAQ本来打了半天feel good都快调出来了然后说换题了QAQ(所以可能那题的代码会过一阵子再放上来了QAQ 不过还是大爆手速打了一通拿到首杀了嘻嘻 美滋滋辽 然 ...
随机推荐
- OpenGL.Qt551.问题
1.Qt551 + vs2013 + Win7x64 缘由:将“教程14:渲染到纹理.html(http://www.opengl-tutorial.org/cn/intermediate-tutor ...
- 41.进程池--Pool
进程池 方便创建,管理进程,单独进程的Process创建,需要手动开启,维护任务函数,以及释放回收 进程池不需要这么麻烦,进程提前创建好,未来在使用的时候,可以直接给与任务函数 某个进程池中的任务结束 ...
- [mysql] C++操作mysql方法
下载:http://mirrors.sohu.com/mysql/MySQL-5.5/ From: http://www.cnblogs.com/magicsoar/p/3817518.html C+ ...
- luogu P3031 [USACO11NOV]高于中位数Above the Median (树状数组优化dp)
链接:https://www.luogu.org/problemnew/show/P3031 题面: 题目描述 Farmer John has lined up his N (1 <= N &l ...
- Oracle 查询id相同多个数据取一条
涉及场景 需要查出同一ID下 COLUMN_A字段为数值型的 多条数据 只去COLUMN_A为最小值的那条 SELECT * FROM (SELECT A.ID, A.COLUMN_A, ROW_NU ...
- kindeditor的配置jsp版
1.将kindeditor资源下载下来,点击这里下载: 2.将资源解压,因为是jsp版本所以只需要保留jsp的文件即可,最终目录为下图 3.在所给的jsp的demo中做配置 注意:demo.jsp中引 ...
- Web Server 分布式服务: Nginx负载均衡
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler使用.其 ...
- selenium登录慕课网
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.s ...
- xpath的一些常用使用
xml文档<html> <head> <title>My page</title> </head> <body> <h2& ...
- Jobs(一)前端页面
Java Web工程中的Intellij中Java Web工程的基本目录: 启动web工程后,显示的默认页面是index.html.需要注意的是,本来IDE自建的是index.jsp,我暂时改成了in ...