11 2021 档案
摘要:题目大意: 给定一个大小为 的数列 ,你需要对这个数列进行 次操作,操作包含如下两种类型: 1 x y z :将区间 范围内的所有元素更新为 (即:\(a_x, a_{x+1}, \ldots,
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3870 涉及操作: 区间取反; 区间和。 其中, 表示第 个分块的元素和, 表示整体是否需要取反。 示例程序: #include <bits/stdc++.h> us
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2357 涉及操作: 区间更新; 单点更新(直接算到区间更新里面); 区间查询; 单点查询(直接算到区间查询里面)。 解题思路: 数列分块。 表示第 个分块中每个数都增加的值;\(sum[
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1928 后缀表达式模板题。 示例程序: #include <bits/stdc++.h> using namespace std; const int maxn = 20020; char s[maxn]; int n;
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P2419 解题思路: 本题其实是求解一类 “关键点”(这里指的关键点是所有点和它之间都能够达到的那些点),我是用dfs搜了 边,因为是 DAG ,所以时间复杂度为 。 但是虽然题面里说保证是
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1119 解题思路: floyd变种题。主要要了解floyd算法的本质就是dp,状态 其实是状态 的状态压缩,表示 与 仅由前 个点(
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P1073 解题思路: 将每个点 ,拆成三层: 第 层:; 第 层:; 第 层:。 各层之间依次建图。 然后对于任意点
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P7297 解题思路: 对于每个颜色 ,在第 层作出一条链,对于 , 和 之间有一条权值为 的双向边。 \((i,
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P5340 解题思路: 拆点/分层图最短路。 每个点 及到达点 是所吃汉堡与所喝可乐数量之差 对应一个二元组 。对二元组求最短路。 示例程序: #include <bit
阅读全文
摘要:题目大意:对大小为 的数列进行 ,每次求出区间最小众数。 解题思路:数列分块。同:LOJ6285. 数列分块入门 9 示例程序: #include <bits/stdc++.h> using namespace std; const int maxn = 40040; int
阅读全文
摘要:题目链接:https://loj.ac/p/6285 设计操作: 区间众数。 解题思路: 我摊牌了,我看的这篇题解:https://www.cnblogs.com/acfunction/p/10051345.html 写的太好了!! 主要操作: :第 块到第 \(j
阅读全文
摘要:题目链接:https://loj.ac/p/6284 涉及操作: 区间查询某一个数 出现的次数; 区间更新。 解题思路: 一开始的思路是除了整块维护以外,再对每一个区间用一个 multiset 维护每一个数出现的次数。这样更新和查询一次的时间复杂度都会降到 \(O(\sqrt n \lo
阅读全文
摘要:题目链接:[https://loj.ac/p/6283](https://loj.ac/p/6283) 设计操作: 1. 区间加法 2. 区间乘法 3. 单点查询 解题思路: 用 维护第 个分块当前乘的数,用 维护第 个分块当前加的数。 若当前乘了
阅读全文
摘要:题目链接:https://loj.ac/p/6282 涉及操作: 单点插入; 单调询问。 解题思路: 每 次插入后,重新把数列平均分一下,重构需要的时间复杂度为 ,重构的次数为 ,可以解决这个问题。 但是按照原作者的代码,是:如果出
阅读全文
摘要:题目链接:https://loj.ac/p/6281 涉及操作: 区间开方; 区间求和。 解题思路: 主要思路: 次方内的数最多开 次方都会变成 。 用 表示第 个分块的整体开方次数,则 时这个
阅读全文
摘要:题目链接:https://loj.ac/p/6280 涉及操作: 区间加法; 区间求和。 解题思路: 数列分块。 需要: 表示第 个分块单独累加的数值和; 表示第 个分块整体累加的数值和(就是分块 内的每个数都会增加 \(t
阅读全文
摘要:题目链接:https://loj.ac/p/6279 涉及操作: 区间加法; 区间询问某个数 的前驱(比其小的最大元素)。 解题思路: 数列分块。思路和第2题思路几乎相同,也是每一段副本排序。完整的分块进行二分查找。 示例程序: #include <bits/stdc++.h> usin
阅读全文
摘要:题目链接:https://loj.ac/p/6278 涉及操作: 区间加法; 区间询问小于某个值 的数的个数。 解题思路: 数列分块。 每个分块保存一个副本并排序(程序中用 vector 容器 vec[i] 来保存第 i 个分块中的信息)。 示例程序: #include <bits/st
阅读全文
摘要:题目链接:https://loj.ac/p/6277 涉及操作: 区间更新; 单点查询。 解题思路: 数列分块。 a[i] 表示:第i个数自己存储的值 block 表示每个分块的最大尺寸 belong[i] 表示:第i个数所属的分块 tag[i] 表示:第i个分块的累加值 示例程序: #includ
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3402 题目大意: 给定 个集合,第 个集合内初始状态下只有一个数,为 。 有 次操作。操作分为 种: 1 a b 合并 所在集合; 2 k 回到
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P3919 解题思路: 主席树纯模板题。 示例程序: #include <bits/stdc++.h> using namespace std; const int maxn = 1000010; struct Tree {
阅读全文
摘要:题目链接:https://www.luogu.com.cn/problem/P6883 解题思路: 对于每个状态 ,它的上一个状态 必然满足: 的二进制表示中恰好有一位和 不相同,且那一位为 。(设这一位为第 位) 然后遍历 \(
阅读全文
摘要:题目链接:http://acm.zzuli.edu.cn/problem.php?id=2834 题目大意: 给定一个大小为 的数列 ,对于每个 ,求它前面由后往前第 个大于 的数。 解题思路: 假设一开始区间
阅读全文