随笔分类 - 基础—差分
摘要:あなたと迎えたい明日のために
涙を隠しては
阅读全文
摘要:注意是等于s不是大于s dfs,用set或者map存这条链到root的点权和sum[u],更新答案的时候查一下有没有s sum[u]即可 cpp include include include using namespace std; const int N=500005; int n,m,a[N]
阅读全文
摘要:一看区间操作,很容易想到差分 所以就是先差分,然后为了保证最小步数,把政府差分抵消,也就相当于原数组区间加减 第二问,因为差分数组抵消之后不为0就需要使用n+1的虚拟位置,而这个的值其实没有,所以我们可以在这个抵消后的数的范围内随意操作,也就是任意取值
阅读全文
摘要:这居然是我第一次写线段树合并……所以我居然在合并的时候加点结果WAWAWAMLEMLEMLE……!ro的时候居然直接指到la就行…… 树上差分,每个点建一棵动态开点线段树,然后统计答案的时候合并即可 cpp include include include using namespace std; c
阅读全文
摘要:二分mid,然后用1~mid的操作在差分序列上加减,最后把差分序列前缀和起来,看是否有有超过初始r值的 线段树,模拟即可,洛谷上会T一个点(开O2能过)
阅读全文
摘要:常数巨大,lg上开o2才能A 首先预处理出运输计划的长度len和lca,然后二分一个长度w,对于长度大于w的运输计划,在树上差分(d[u]+1,d[v]+1,d[lca] 2),然后dfs,找出所有覆盖所有边的边的边权最大值,然后用最长运输计划减去最大值看是否符合要求即可 upt:我怕不是个傻子……
阅读全文
摘要:长久以来的心理阴影?但是其实非常简单…… 预处理出deep和每组st的lca,在这里我简单粗暴的拿树剖爆算了 然后考虑对于一组s t lca来说,被这组贡献的观察员x当且仅当: x在s到lca的路径上,且w[x]==de[s] de[x]—— de[x]+w[x]==de[s]; x在lca到t的路
阅读全文
摘要:首先O(n^3)的贪心很好想,就是枚举k然后从前往后扫,扫到反就翻转区间 然后考虑优化掉翻转区间维,就是搞成差分的形式,在翻转区间的尾部打上标记,再用一个变量维护当前的翻转次数,加到当前状态上来判断是否需要翻转即可 cpp include include include using namespac
阅读全文
摘要:s[i]为差分后的“i这头牛前有几头比它高”,计算答案的时候加成前缀和,假设第一头最高减一下即可 用map记录一下被加过的区间,避免重复 cpp include include include include using namespace std; const int N=10005; int n
阅读全文
摘要:这个题方法还挺多的,不过洛谷上要输出方案所以用堆最方便 先按起始时间从小到大排序。 我用的是greater重定义优先队列(小根堆)。用pair存牛棚用完时间(first)和牛棚编号(second),每次查看队首的first是否比当前牛的起始时间早,是则弹出队首记录当前牛的答案,再把新的pair放进去
阅读全文

浙公网安备 33010602011771号