传送门:HDU 5033
题意:有一排建筑物坐落在一条直线上,每个建筑物都有一定的高度,给出一个X坐标,高度为0,问X位置能看到的视角是多少度,保证X左右有建筑物。
思路:很容易想到用单调栈单调队列什么的去维护,但就是想不出来该怎么维护。。
其实我们应该维护一个相邻两顶点间斜率绝对值单调递增的栈,套路还是单调栈的套路,不过是进出栈的条件变成了斜率的相对大小,然后就是把询问也当建筑物放进去会使代码好写很多,对于每个点记录其左边和右边能看到的最高的建筑物,最后转化一下按询问顺序输出就行了。
代码:
#include<bits/stdc++.h>
#define ll long long
#define pi acos(-1.0)
#define i