11 2021 档案

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