题意:
数轴上有n个楼,分别在1~n这些点上;
m次查询,每次改变一个楼的高度,问从(0,0)这个点可以看到多少楼;
题解:
对于一个楼来说要想看到这个楼,那么前面的楼的斜率一定比这个楼小;
那么考虑分块的话,就将块中楼的斜率都求出来;
然后维护出一个从块首元素开始的递增序列;
即包括块首元素的下标最小的序列;
扫一遍所有块,取该块之前的所有楼的最大斜率为m...
分类:
其他好文 时间:
2015-07-08 20:58:53
阅读次数:
128
做完此题之后 自己应该算是真正理解了斜率优化DP根据状态转移方程f[i]=max(f[j]+ax^2+bx+c),x=sum[i]-sum[j]可以变形为 f[i]=max((a*sum[j]^2-b*sum[j])-(2a*sum[j]*sum[i]))+(a*sum[i]^2+b*sum[i]+...
该题表面让我们求一个字符串的问题,但是却可以转化成求斜率的问题, 紫书上已经说的很清楚了,我这里就不再赘述 。
代码如下 :
#include
using namespace std;
const int maxn = 100000 + 5;
int n,T,L;
double a[maxn],p[maxn];
char s[maxn];
int campare(int x1,int x2,...
分类:
其他好文 时间:
2015-07-06 19:49:45
阅读次数:
71
【分析】
维护一个下凸包。
首先按照斜率来从小到大排序。
考虑斜率相同的,肯定只能选截距大的,把截距小的给筛掉。
然后用栈来维护下凸包,先压入前两条直线。
然后对于每一条直线i,设栈中上一条直线p=stk[stk[0]]和上上条直线q=stk[stk[0]-1]。
找到i与p的交点m,p与q的交点n。
画三条直线,把n点看成固定的,由于斜率从小到大,要使得上一条直线p看不到,那么m一...
分类:
其他好文 时间:
2015-07-05 16:44:06
阅读次数:
103
bzoj1047 理想的正方形题目大意:求a*b的矩阵中一个n*n的子矩阵,使得子矩阵的最大值和最小值的差最小。思路:一开始认为能用二维线段树a掉,但lcomyn大神写了一下,结果T了,于是就寻找新的写法。借鉴了斜率优化的思路,发现单调队列可以优越的做到O(ab)的求出整个矩阵中每个点左面延伸n位的...
分类:
其他好文 时间:
2015-07-04 19:47:22
阅读次数:
136
题意:
给n个点,其中最多有多少点共线(n
分析:
这是一个经典问题,朴素n^3解法:枚举n^2条直线,判断每条直线与多少点相交,复杂度n^3。明显会超时。这是n^2logn的解法:枚举每个点,对某个点与其他点连的n条直线按斜率排序,设这些直线中斜率相同的直线有k条,则k更新答案。这里想着重说一下斜率的问题,网上很多代码都是直接算斜率的,但计算几何的题目不推荐用斜率,最好用叉积代替有关斜率的...
分类:
其他好文 时间:
2015-07-04 09:45:41
阅读次数:
154
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1100首先按x坐标排序,然后相邻的三个点A,B,C 组成的三条直线必然有K(AC) 2 #include 3 #include 4 #include 5 #includ...
分类:
其他好文 时间:
2015-07-02 20:53:48
阅读次数:
137
斜率优化问题一般都是决策单调问题。对于这题可以证明单调决策。
令sum[i]=sigma(c [k] ) 1
首先我们可以写出转移方程 dp[i] = min( dp[j] + (f[i]-f[j]-c)^2 ) 。令决策j1
dp[j2]+(f[i]-f[j2]-c)^2
可以得带 ((dp[j2]+f[j2]^2)-(dp[j1]+f[j1]^2) )/(f[j2]-f[j1...
分类:
其他好文 时间:
2015-06-29 14:53:34
阅读次数:
131
f[i] = min { f[j] + sqr(a[i] - a[j]) }f[i]= min { -2 * a[i] * a[j] + a[j] * a[j] + f[j] } + a[i] * a[i]由于a[i]不是单调递增的,不能直接斜率dp。考虑有cdq分治来做,复杂度(nlog2n) 1...
分类:
其他好文 时间:
2015-06-27 18:08:57
阅读次数:
111
题解:
对于一个点对,如果它的连线的方程的 xx 为定值 ,即为一条竖线,那么我可以把所有点以 xx 为第一键值, yy 为第二键值排序,然后这条线两端的第一个点与这条线段做个三角形,其面积都可能更新答案。。
然后我们可以先把所有线按照斜率排个序,然后发现每次按序修改y轴,可以 O(1)O(1) 得到旋转坐标系后的点的序列。
可以观察此图(这是个小特例福利哦):
呃。就是每次旋转到一条...
分类:
其他好文 时间:
2015-06-23 21:45:58
阅读次数:
241