POJ
Lonvon_
这个作者很懒,什么都没留下…
展开
-
POJ 2991 线段树+向量旋转
向量(x,y)(x,y)逆时针旋转θ\theta:x′=x∗cosθ−y∗sinθx^{'}=x*cos\theta-y*sin\thetay′=x∗sinθ+y∗cosθy^{'}=x*sin\theta+y*cos\theta相对旋转量 语言的坑:printf("%.2lf %.2lf", vx[0], vy[0])导致超时的悲剧#include #include #include原创 2018-01-07 12:00:50 · 261 阅读 · 0 评论 -
BBST
最近学习了一下各种BBST,简单总结一下。Splay Tree:区间操作强无敌...对[l,r)区间的操作,把l-1结点splay到树根,r结点splay到根的右结点,则根的右结点的左子树就是区间[l,r),然后对这棵子树进行操作。一个splay操作的均摊复杂度为O(logn)。常见操作:[l,r)区间每个数加a,每个结点维护一个加的数值的lazy_tag[l,r)区间翻转,每个结点维原创 2018-01-16 21:31:00 · 2163 阅读 · 0 评论 -
POJ 2104 分桶法/线段树
题目:给一个长度为n的数组a1,a2...an,1用平方分割来做,取块大小b=sqrt(n)把整个数组分块,每个块进行排序使块内有序。排序的复杂度为O((n/b)*(n/b)\*logb)=O(nlogn)然后求[i,j]区间第k大的数,[i,j]区间的首尾可能是部分块,是无序的,中间是有序的块。想着如何从分割后的块中高效找出第k大的数,对有序的块维护一个数对[l,r)表示第k大的数在本块原创 2018-01-09 18:09:29 · 277 阅读 · 0 评论 -
POJ 3468 区间更新的线段树、树状数组
题目:给一个数组A1,A2,…An,两个操作:对[a,b]区间内的每个数加C,查询[a,b]区间的和。 也就是实现能够高效区间更新和求和的线段树和树状数组。 线段树的每个结点维护两个值,一个是对区间内所有数都加上的值t,这样在区间更新时不必再向下更新。另一个是除t外区间内所有数的和s。若结点k的对应区间为[l,r),则区间内所有数的和为s+t*(r-l)。 能够实现高效区间更新的树状数组则比较原创 2018-01-09 19:31:28 · 290 阅读 · 0 评论 -
搜索
熟练一下搜索问题… POJ 3669 两种思路,一种是比较直接的想法,先把所有的袭击事件按时间排序,在BFS的过程中处理袭击事件;另一种是先预处理,再BFS。 写第一种时遇到的问题:在BFS中循环的结束条件是que.empty() || k >= M,若在队列为空时结束,则可能还有后续的袭击会摧毁之前能够到达的地方,因此最后需要处理完所有的袭击。排序后BFS#include &...原创 2018-03-08 15:56:18 · 115 阅读 · 0 评论