摘要:
学到了关于线段树区间更新的不下传lazy标记的写法, 应用在树套树比方说二维线段树这种,跨树传递lazy标记比较繁琐的地方可以很大的简化代码 ①首先是区间加值,区间求和的板子 节点维护:区间和,区间标记 update时,把路径上每个节点的值都加上(b-a+1)*val,到达目标节点的时候给节点打上标 阅读全文
摘要:
常见于一维信息的迭代线性叠加 例题1:583D - Once Again... 求循环T次的数字串的LIS 想到了矩阵加速,不过以前只见过优化一维信息,所以尝试用dp[300]的值域结尾最长长度来表示目标向量 设计矩阵的时候就发现这里面加1加2的不满足线性叠加 事实上通过这道题我也明白了矩阵不止可以 阅读全文
摘要:
通常与计数挂钩,在一个环中确定一个元素就可以确定一整个环 例题1: Function HDU - 6038 给出两个排列,问可行映射f(i)=b(f(a(i)))的数目 首先把公式中的i和ai都带入数字,看成通过b在映射函数值, 显然这是一些置换环,环中确定其中一个f(x)值就可以根据b函数推出整个 阅读全文
摘要:
目前见过最麻烦的树形dp还是第一场多校那题link 维护的是子树中同色子树的尺寸 存放一些树相关的问题 目前手上能处理树相关问题的技能还挺多的 ①树链剖分:树链修改/子树修改/树链查询/子树查询 ②树上差分:树链修改只有最终一次查询 ③dfs序:子树信息,结合线段树可以完成子树的修改与查询,结合平衡 阅读全文
摘要:
①把序列A改成非严格单调递增,至少需要修改序列长减去A的最长不下降子序列长度个数字 ②把序列A改成严格单调递增,需要构造序列Bi=Ai-1,然后用上面的方法来求 如果直接用序列长减去A的LIS是不对的,例如112233,关键这里存在数字过于密集的情况, 而构造B序列【1,0,0,-1,-1,2】之后 阅读全文
摘要:
一些满足最优子结构的关于连续区间的问题,可以尝试在第一维枚举数组的时候, 添加一个维度表示第i个数是否和前面连续, 例如dp[i][0]表示i未操作最优,dp[i][1]表示i正在操作最优,dp[i][2]表示i之前已经结束操作最优 例题1: Alyona and Strings 划分k段的最长公共 阅读全文
摘要:
目前的体感是在平衡度上做文章,若只考虑两串的拼接关系进行计数,可以把信息压缩到平衡度上 现有的压缩方法例如dp[i][j]表示长为i,平衡度j的括号串数目, dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1],计左括号平衡度+1,右括号平衡度-1 这个dp后文就叫平衡度计数了,可以 阅读全文
摘要:
Tips区间修改的多次建树记得每个区间的add都清空! 线段树核心的题目复杂度一般是nlogn 设计算法的时候,第一维循环n一般是枚举我们建树的数组,可以像是枚举区间左端点之类的 第二层的话一般需要做到用线段树log维护枚举位置变动的贡献,这个贡献区间往往和pre,nxt挂钩 第一道例题:BZOJ3 阅读全文