摘要:题目 https://loj.ac/p/6282 题解 数据范围 \(1 \leq n \leq 10^5\),因此进行分块最多分 \(\sqrt{10^5} ≈ 318\) 块。且数据是随机生成的,因此插入数据后,每个块的长度期望值为 \(\frac{318+(318 + 100000/318)}
阅读全文
摘要:题目 https://codeforces.com/problemset/problem/2026/D 题意 第一行输入一个正整数 \(n(1 \leq n \leq 3e5)\),第二行输入 \(n\) 个整数 \(a_1, a_2, ..., a_i, ..., a_n(-10 \leq a_i
阅读全文
摘要:前言 对一个 int 类型的非负整数进行开方下取整,最多只会开方四次大小就不会再发生变化。一个大于 \(0\) 的正整数开方下取整最后的结果比如是 \(1\),而 \(1\) 开方的结果仍然会是 \(1\);\(0\) 开方的结果仍是 \(0\)。 验证int类型整数最多可以开方的次数的demo #
阅读全文
摘要:题目 https://loj.ac/p/6280 题解 将 \(n\) 个元素的数组 \(a\) 按块长 \(\sqrt{n}\) 进行分块处理。为每个块设置两个懒添加标记 \(add[i], sum[i]\),分别代表这个区间每个元素共同添加的数值大小,区间和(不包括懒添加的值)。 对于区间加操作
阅读全文
摘要:前言 异或运算:是一种在二进制数系统中使用的逻辑运算。它的基本规则是对两个二进制位进行比较,如果这两个位不同,则结果为 \(1\);如果相同,则结果为 \(0\)。 异或运算的规则 \(0\) XOR \(0\) = \(0\) \(0\) XOR \(1\) = \(1\) \(1\) XOR \
阅读全文
摘要:题目 https://loj.ac/p/6279 题解 将 \(n\) 个元素的数组 \(a\) 按块长 \(\sqrt{n}\) 进行分块处理。为每个块设置一个懒添加标记 \(add[i]\),代表这个区间每个元素共同添加的数值大小。 对于任意一个无序数组,想要维护出该数组内某个值的前驱(即小于某
阅读全文
摘要:题目 https://loj.ac/p/6278 题解 将 \(n\) 个元素的数组 \(a\) 按块长 \(\sqrt{n}\) 进行分块处理。为每个块设置一个懒添加标记 \(add[i]\),代表这个区间每个元素共同添加的数值大小。 对于任意一个无序数组,想要维护出该数组内小于某个值的元素个数,
阅读全文
摘要:前言 分块是一种优雅的暴力,将数组按块长 \(\sqrt{n}\) 进行分块,可实现区间加法、区间求和和区间逆序对计数等场景,进行 \(m\) 次操作的时间复杂度:\(O(m\sqrt{n})\)。 对于整个块都进行操作,可以用打上标记的方式来取代操作这个块的全部元素,由于最多只需要处理 \(\sq
阅读全文
摘要:题解 首先思考暴力枚举长度为 \(len∈[1, min(strlen(s), strlen(t))]\),最差情况下为字符串 \(s\) 和字符串 \(t\) 全为长度为 \(10000\) 的全英文字符串,时间复杂度: \(O(n^2)\),显然会超时。 容易证明的是:若存在一个长度为 \(x\
阅读全文