摘要: 反正肯定要建虚树,考虑建完之后怎么做 先随便dp一下算出来距离某点最近的询问点mi[x](因为有的虚树上的点它不是询问点嘛) 那我们对于某条链x到fa[x]上的非虚树上的点(包括他们的非虚树上的孩子),要么把它分给mi[x],要么分给mi[fa[x]] 我找到这个中间点以后,在原树上倍增跳过去,算他 阅读全文
posted @ 2018-11-21 20:51 Ressed 阅读(200) 评论(0) 推荐(0)
摘要: 首先,如果我知道[l,r],要转移到[l,r+1]的时候,就是加上以r+1为右端点,[l,r+1]为左端点的区间的最小值,其他情况和这个类似 考虑这玩意怎么求 右端点固定的话,我左端点越往左走,这个最小值一定是越来越小 找到[l,r+1]范围内的最小值mi,那么在mi前面的第一个比mi小的位置(记为 阅读全文
posted @ 2018-11-21 20:12 Ressed 阅读(248) 评论(0) 推荐(0)
摘要: 莫队 如果知道[l,r]的答案时能快速求出[l+1,r][l,r+1][l-1,r][l,r-1]的答案,那么可以用莫队离线求解 如果要从[l,r]得到[l',r'],那么需要$O(|r'-r|+|l'-l|)$次更新答案 所以需要确定一个求答案的顺序使得这玩意最优 以$\frac{n}{q}$分块 阅读全文
posted @ 2018-11-21 20:01 Ressed 阅读(275) 评论(0) 推荐(0)
摘要: 相邻格子连双向边,如果一个点有障碍,那进它的边权就是1,否则是0 这样的话,两点间的最短路+[起始点有障碍],就是从一个点走到另一个需要清除的障碍的个数 求出最短路后枚举这两个点就可以了 然而30*30还是太大跑不开floyd,只能写一个dijkstra 阅读全文
posted @ 2018-11-21 19:40 Ressed 阅读(174) 评论(0) 推荐(0)
摘要: 设f[i]是以i位置为结尾的最长满足条件子序列的长度 那么j能转移到i的条件是,$j<i , max[j]<=a[i] , a[j]<=min[i]$,其中max和min表示这个位置能变化出来的最大值或最小值 这个东西用一个cdq来做 具体来说,先做左半区间,然后左边按max排序,右边按a排序,把左 阅读全文
posted @ 2018-11-21 19:35 Ressed 阅读(348) 评论(0) 推荐(0)
摘要: 交换的话,只有它们中间的书会对答案产生影响 树状数组记位置,套线段树记书的编号 它对应的页数和书的个数 然后就是减掉中间那些原来是逆序对的,再把交换以后是逆序对的加上 别忘了考虑这两个自己交换以后是不是逆序的 最重要的一步:开个O2 阅读全文
posted @ 2018-11-21 19:30 Ressed 阅读(162) 评论(0) 推荐(0)