随笔分类 - cdq分治
摘要:每个时刻都形成若干段满足段内任意两点可达。将其视为若干正方形。则查询相当于求历史上某点被正方形包含的时刻数量。并且注意到每个时刻只有O(1)个正方形出现或消失,那么求出每个矩形的出现时间和消失时间,就是裸的三维偏序,cdq分治+树状数组即可。
阅读全文
摘要:重写一遍很久以前写过的题。 考虑链上的问题。容易想到设f[i]为i到1的最少购票费用,转移有f[i]=min{f[j]+(dep[i]-dep[j])*p[i]+q[i]} (dep[i]-dep[j]<=l[i])。套路的考虑若j转移优于k(dep[j]>dep[k]),则f[j]-dep[j]*
阅读全文
摘要:按卖出时间排序后,设f[i]为买下第i台机器后的当前最大收益,则显然有f[i]=max{f[j]+gj*(di-dj-1)+rj-pi},且若此值<0,应设为-inf以表示无法购买第i台机器。 考虑优化,显然是一个斜率优化式子,设j转移优于k,则f[j]+gj(di-dj-1)+rj>f[k]+gk
阅读全文
摘要:首先考虑怎么安排攻击顺序。显然如果攻击了某台兵器就应该一直连续攻击直到将其破坏,破坏所需时间可以直接算出来,设其为b。假设确定了某个破坏顺序,如果交换相邻两个兵器,显然不会对其他兵器造成影响,两种顺序的代价则分别为a1(b1-1)+a2(b1+b2-1)和a1(b1+b2-1)+a2(b2-1),那
阅读全文
摘要:显然可以dp:设f[i]为前i个人最多能分多少组,则f[i]=max{f[j]}+1 (cmax<=i-j<=dmin)。 容易发现d的限制是一段连续区间,二分或者随便怎么搞都行。c则有点麻烦,考虑分治。找到区间中c最大的位置,处理左边区间再向右边(包括该位置)转移,最后处理右边区间(当然就是cdq
阅读全文
摘要:非常裸的KD-tree。然而我没学啊。 考虑如何离线求一个点在平面中的曼哈顿最近点。 绝对值显得有点麻烦,于是把绝对值拆开分情况讨论一波。对于横坐标小于该点的,记录对于纵坐标的前缀x+y最大值和后缀x-y最大值;横坐标大于该点的,记录对于纵坐标的前缀y-x最大值和后缀-y-x最大值。 不过这样不太方
阅读全文
摘要:一个很显然的思路是把边按时间段拆开线段树分治一下,用lct维护MST。理论上复杂度是O((M+Q)logNlogQ),实际常数爆炸T成狗。正解写不动了。
阅读全文
摘要:把查询看做是在一条时间轴上。那么每条边都有几段存在时间。于是线段树分治就好了。 然而在bzoj上t掉了,不知道是常数大了还是写挂了。 以及brk不知道是啥做数组名过不了编译。
阅读全文
摘要:之前学了一下线段树分治,这还是第一次写。思想其实挺好理解,即离线后把一个操作影响到的时间段拆成线段树上的区间,并标记永久化。之后一块处理,对于某个节点表示的时间段,影响到他的就是该节点一直到线段树根的所有操作。(语死早)这样可以把操作的插入和删除改为只有插入。 具体到这题,由于并查集没法删除边,我们
阅读全文