摘要:
笛卡尔树模版 按第一关键字排序,然后按第二关键字构建笛卡尔树即可。 阅读全文
摘要:
LCT 和魔法森林类似,先排序一个关键字,用LCT动态维护另一个关键字。 这里把r从大到小排序,然后动态加边。 因为r的顺序是确定的,每次加入新边以后,r肯定是看加入的这条边的,所以我们考虑l就好了。 对于l,我们要求能够通过的数量,肯定是要保留合法的大范围,因为小范围包含在了大范围里。 之后就和魔 阅读全文
摘要:
线段树 显然的方法是把区间离散化以后,维护每个区间内出现的数的个数。 查询的时候直接用左端点的值加上查询的数的排名/区间插入的次数就行了。 处理这类问题一般是让每个端点的右区间+1,然后用叶子节点来保存一段区间的信息。 当我们的线段树递归到叶子结点的时候,l = r, 我们如果让线段树维护当前区间每 阅读全文
摘要:
乱搞 先把每段按1结尾分开,然后暴力合并,合并的条件是每段字符串的字典序都不下降,这样可以保证是最小表示。 因为如果后面有一段字典序比前面合并的任意一段字典序小,那它放到这段合并的字符串最前面显然可以更小,因此不符合最小表示,这段不需要合并。 include define INF 0x3f3f3f3 阅读全文
摘要:
线段树 按照高度排序以后,对价格的值域建线段树,维护数量和总费用。 每次枚举一个高度,假设该高度的树有m棵,比它的高的树显然要全部砍掉,直接用前缀和统计费用,又假设比他低的树有n棵, 我们要砍的数量就是n m + 1,在值域线段树里查询前n m+1棵树的总费用即可。 include define I 阅读全文
摘要:
线段树 可以先把纵坐标离散化,然后按横坐标排序,然后按照x来枚举矩形的左右边界,因为排完序之后相同的 x肯定是在一起的。 用线段树维护相同y下的权值,这样问题就变成区间最大子段和。 include define INF 2333333333333333333 define full(a, b) me 阅读全文
摘要:
模拟 + 二维st表 枚举每一次所有技能全部到达的level,然后分别对每个技能花费为负的情况往上加,前提是至少有一个不能加,因为可能下一次的全部技能到达的level拿到的收益是个负数。 每次枚举都不拿多的d才可以可以遍历所有情况。 分别枚举每个技能的最小cost的时候,可以用st表来维护前缀和。 阅读全文
摘要:
模拟字符串处理 很暴力的方法,就是把能变成::的全部枚举一次,选最小的即可。。 include define INF 0x3f3f3f3f define full(a, b) memset(a, b, sizeof a) define __fastIn ios::sync_with_stdio(fa 阅读全文
摘要:
矩阵快速幂 把指数按十进制拆开的快速幂。。。 include define INF 0x3f3f3f3f define full(a, b) memset(a, b, sizeof a) define __fastIn ios::sync_with_stdio(false), cin.tie(0) 阅读全文
摘要:
乱搞 先把$N^\frac{1}{5}$的质数筛出来 然后在把这些质数分解,最后剩下的如果是1,就可以直接出答案了。 如果不是1,可以想到剩下的这个数不会超过某个数的4次方,因为那样就超过1e18了 所以考虑影响答案的情况,这个数可以拆成 p^4, p^3, p^2, p^2 q^2,其中p和q都是 阅读全文