Loading

摘要: 我是 AvisD,一个来自浙江的初三 oier。 阅读全文
posted @ 2025-03-10 15:19 AvisD 阅读(38) 评论(2) 推荐(0)
摘要: 枚举子集 发现自己经常记不住这个怎么写,就来写篇题解吧。 首先对于一个 \(n\) 位二进制数 \(x\),求二进制位上都是 \(x\) 的子集的数有哪些, 比如:101的子集有100、001、000。 然后这个东西如果直接 \(2^n\) 次枚举的话,复杂度就爆炸了。 所以可以用一个很厉害的东西, 阅读全文
posted @ 2025-09-23 20:01 AvisD 阅读(20) 评论(1) 推荐(0)
摘要: 欧拉序树上莫队 通过欧拉序把树上莫队转化成序列莫队。 这里的欧拉序只的是 \(dfs\) 刚遍历到的时候加入点,遍历完整颗子树的时候再加入这个点。设 \(u\) 第一次出现的位置是 \(f[u]\),第二次出现的位置是 \(g[u]\),那么当我要求 \(u\) 到 \(v\) 的信息时,在 \([ 阅读全文
posted @ 2025-09-23 16:37 AvisD 阅读(11) 评论(0) 推荐(0)
摘要: 首先一个结论是:只有在 \(Y \bmod X =0\) 时,才有答案。 证明显然,因为 \(\gcd\) 和 \(\operatorname{lcm}\) 的性质,\(a_i\) 和 \(v\) 是 \(X\) 的倍数,\(a_j\) 和 \(v\) 是 \(Y\) 的因数。 那么接下来,因为 \ 阅读全文
posted @ 2025-09-21 21:27 AvisD 阅读(11) 评论(0) 推荐(0)
摘要: CF494C Helping People 看到保证区间不会交错,没想出来这个性质是干什么的,看了题解才知道,这说明区间之间只会互相包含。 那么我们就可以为每个区间指定一个 \(fa\) 区间来代表最小的包含它的区间,不难发现这构成了森林! 更妙的是,当我们加入一个 \(l=1,r=n,p=0\) 阅读全文
posted @ 2025-09-21 21:27 AvisD 阅读(9) 评论(0) 推荐(0)
摘要: 平衡树从入门到入土 dly 想要学平衡树,但她打开 oiwiki 后傻眼了。怎么有这么多种平衡树呢? Treap、FHQ-Treap、Splay、替罪羊、WBLT,甚至还有 01-Trie 实现的平衡树。 各种平衡树有什么不同呢?它们都用什么方法呢?它们的优缺点是什么呢? 如果初学平衡树的你像当初的 阅读全文
posted @ 2025-08-01 13:08 AvisD 阅读(47) 评论(3) 推荐(1)
摘要: 串串从入门到入土 Part.1 KMP算法 解决问题:匹配两个字符串 \(s\) 和 \(t\)。 核心:找 border(同时是 \(s[1,i]\) 前缀和后缀的最大长度) for(int i=2,j=0;i<=n;i++) { while(j&&p[j+1]!=p[i])j=ne[j]; if 阅读全文
posted @ 2025-08-01 13:02 AvisD 阅读(35) 评论(3) 推荐(1)
摘要: 题面非常长,但是稍微思考一下发现就是求两边能量和的最小值的两倍。 容易想到离散化后用树状数组来维护每个温度上的能量情况(因为 \(n=2\times 10^6\),线段树解决常数太大会寄掉),那么只要解决查询就好了。 因为求的是最小值,而随着温度的上升,冰系战士能量和越来越大,火系战士能量和越来越小 阅读全文
posted @ 2025-07-19 14:48 AvisD 阅读(13) 评论(0) 推荐(0)
摘要: 好题目啊! 看到题目,思考一下发现我们要找出所有不同的位置的个数,假设这个数字为 \(ans\),那么答案就是 \(10^{ans-1}\times 9\)。 为什么要减一?因为题目中说这是一个十进制大数,所以第一位不能是0,有 \(9\) 种选择。 按照这个思路,我们可以用并查集来维护,朴素代码如 阅读全文
posted @ 2025-07-18 18:04 AvisD 阅读(17) 评论(0) 推荐(0)
摘要: G题竟然是个板子,还挺简单的。 现在的加入的数关系到上一个的答案,所以这题不能离线了。 注意到如果值域在 \(10^5\) 以内我们可以用线段树直接解决了, 但现在的值域在 \(10^9\) 里,那么用一个动态开点线段树就好了! 最多加入 \(3\times 10^5\) 个数,每个数的 \(\lo 阅读全文
posted @ 2025-04-28 15:54 AvisD 阅读(18) 评论(0) 推荐(0)
摘要: 最近太摆了,写一篇题解。 只走偶数步是很好处理的,直接用map存一下之后上并查集。 主要是还有奇数步,这个的话就可以用set存每个连通块可以小于等于一步走到的点了。 当然合并的时候要把set也合并上,用启发式合并就好了,反正存的东西 \(\le m\)。 #include<bits/stdc++.h 阅读全文
posted @ 2025-04-28 15:30 AvisD 阅读(22) 评论(0) 推荐(0)