摘要:
做了两个几何题,思路比较相近。bz1007水平可见直线:如果从无线高处往下看,只有没被遮挡直线可以被看见(废话..),那么怎么算不被遮挡呢?因为直线是无限延伸的,所以斜率最大和最小的一定不会被挡住。那么我们可以吧直线按照斜率排一下看上图,k,j,i是按斜率排好的3条线,注意如果红点在蓝线一边的时候,j会被i挡住,在另一边时就不会被挡住。那么我们只要按那个顺序依次进栈,判断后进的是否挡住之前的,挡住了就把前面的踢掉,最后我们就得到了一堆直线组成的队列。它们一定能被看见。bz1038瞭望塔这个题和上面那个很像,也就是说,我们如果把山坡延长一下,就可以得到若干条直线,我们如上题一样操作,便可得到一堆 阅读全文
摘要:
线段树维护区间,比较好像,思路清晰一点的话可以很快地写出来。维护4个域:add,加标记mul,乘标记size,范围大小key,区间和考虑4种情况:++,**,*+,+*前3种显然直接搞一下就行了,在区间上打标记(这里我们设置是打了标记的同时计算区间和)。先加在乘需要想想,对于一个X+C的式子,如果在外面乘了一个D的话成了D(X+C),去括号变成DX+DC,于是第4种情况既要修改乘标记,又要修改加标记。注意,乘和加标记代表的都是给区间的每一个数乘或加一个数,所以mul对key的影响是key*mul,而add的影响是key+add,注意永远是先乘再加。最后就是注意一下数组下标不要越界,数不要撑爆( 阅读全文
摘要:
莫队算法,搞定!思路很简单:对于每个询问,我们把它看成(l[i],r[i])这样一个平面上的点,那么询问之间的转移可以看成点之间的曼哈顿距离。那么我们要找到最小的距离怎么做呢?1.曼哈顿路径,这个不好搞。2.曼哈顿最小生成树,据说这个的权和是1的2倍,总之可以搞。那么我们先要搞定manhattan最小生成树。如有n个点,那么复杂度是n^2的。这样肯定不行。根据定理,每个点出发向8个方向的范围内最多只与一个点相连,那么我们只要想这8个点连边建图,这样只会有8n条边(去重了还剩4n),把这个图建出来,最小生成树就很好搞了。给个链接:http://wenku.baidu.com/view/1e487 阅读全文