上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 65 下一页
摘要: 容易想到区间转化成前缀和。这样每个询问有了二维坐标,莫队即可。 阅读全文
posted @ 2018-12-04 13:19 Gloid 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 相当于求满足在子段中出现的颜色只在该子段中出现的非空子段数量。这也就相当于其中出现的颜色最左出现的位置在左端点右侧,最右出现的位置在右端点左侧。那么若固定某个端点,仅考虑对该端点的限制,会有一段合法区间。这个区间可以二分+st表求出。于是枚举右端点,在其合法区间内查询有多少个合法左端点(即合法区间包 阅读全文
posted @ 2018-12-04 12:44 Gloid 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 设f[i][j][0/1]为前i位选j段时其中第i位选/不选最多能匹配到哪,转移时f[i][j][0]→f[i+1][j][0],f[i][j][1]→f[i+1][j][0],f[i][j][1]→f[i+1][j][1],f[i][j][0]→f[i+1][j+1][1]。失配时找到最后一位相同 阅读全文
posted @ 2018-12-03 22:52 Gloid 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 容易猜到能选择的黑点个数是一个连续区间。那么设f[i][j]为i子树内选j个点形成包含根的连通块,最多有几个黑点,g[i][j]为最少有几个黑点,暴力dp是O(n2)的,求出每个连通块大小对应的黑点数量取值范围即可。 惊觉差点不会树形背包了。注意不要出现任何非法转移,即使看上去无伤大雅。 阅读全文
posted @ 2018-12-03 21:48 Gloid 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 设f[i]为选择i对i-1和i+1所带来的贡献。则有f[i-1]+f[i+1]+a[i]-2f[i]=b[i],特殊地,f[2]+a[1]=b[1],f[n-1]+a[n]-2f[n]=b[n]。可以发现这样我们有n-1个未知数和n个方程,代入求解判断是否矛盾即可。 但这只有必要性显然,为什么是充分 阅读全文
posted @ 2018-12-03 19:45 Gloid 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 大胆猜想每一步都相当于是第一步。稍微验证一下发现是对的。就做完了。 阅读全文
posted @ 2018-12-03 13:39 Gloid 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 即要求动态维护边双。出现环时将路径上的点合并即可。LCT维护。具体地,加边成环时makeroot+access+splay一套把这段路径提出来,暴力dfs修改并查集祖先,并将这部分与根断开,视为删除这些点,以后就以并查集中的祖先代替这些点。access时更新每个点的父亲。注意由于之前的删点操作,判断 阅读全文
posted @ 2018-12-03 12:54 Gloid 阅读(233) 评论(0) 推荐(0) 编辑
摘要: 首先二分答案简化一下问题,现在只有0和1了,要求最后剩下的是1。再简化一下考虑没有已固定的位置怎么做。考虑每个位置由其合并到的位置连边,显然这样形成了一棵三叉树。设f[i]为使得某位置为1其子树至少要放多少个1即可,转移显然。加上已固定位置也类似,修改dp初值即可。 阅读全文
posted @ 2018-12-02 23:14 Gloid 阅读(258) 评论(0) 推荐(0) 编辑
摘要: 对每个权值分别考虑。则只有单点加路径求和的操作。树上差分转化为求到根的路径和,子树加即可。再差分后bit即可。注意树上差分中根的父亲是0,已经忘了是第几次因为这个挂了。 阅读全文
posted @ 2018-12-02 21:52 Gloid 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 如果现在选定了一些要求消灭的敌人而不考虑积分,显然应该让每个敌人被刚好能消灭他的人消灭。再考虑最大化积分,显然我们应该优先消灭ci-bi大的敌人,所选用的a也应尽量大。于是按ci-bi从大到小排序,用一个multiset维护a,每次看其中是否有能消灭该敌人的人,如果有则将最小的删去,并用选中的Σci 阅读全文
posted @ 2018-12-02 20:48 Gloid 阅读(343) 评论(0) 推荐(0) 编辑
上一页 1 ··· 23 24 25 26 27 28 29 30 31 ··· 65 下一页