摘要: 题目链接:[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 阅读(48) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://loj.ac/p/6282 涉及操作: 单点插入; 单调询问。 解题思路: 每 \(\sqrt n\) 次插入后,重新把数列平均分一下,重构需要的时间复杂度为 \(O(n)\),重构的次数为 \(O(\sqrt n)\),可以解决这个问题。 但是按照原作者的代码,是:如果出 阅读全文
posted @ 2021-11-08 21:07 quanjun 阅读(80) 评论(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 阅读(34) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://loj.ac/p/6280 涉及操作: 区间加法; 区间求和。 解题思路: 数列分块。 需要: \(sum_i\) 表示第 \(i\) 个分块单独累加的数值和; \(tag_i\) 表示第 \(i\) 个分块整体累加的数值和(就是分块 \(i\) 内的每个数都会增加 \(t 阅读全文
posted @ 2021-11-08 18:28 quanjun 阅读(81) 评论(0) 推荐(1) 编辑
摘要: 题目链接:https://loj.ac/p/6279 涉及操作: 区间加法; 区间询问某个数 \(x\) 的前驱(比其小的最大元素)。 解题思路: 数列分块。思路和第2题思路几乎相同,也是每一段副本排序。完整的分块进行二分查找。 示例程序: #include <bits/stdc++.h> usin 阅读全文
posted @ 2021-11-08 17:16 quanjun 阅读(49) 评论(0) 推荐(0) 编辑
摘要: 题目链接:https://loj.ac/p/6278 涉及操作: 区间加法; 区间询问小于某个值 \(x\) 的数的个数。 解题思路: 数列分块。 每个分块保存一个副本并排序(程序中用 vector 容器 vec[i] 来保存第 i 个分块中的信息)。 示例程序: #include <bits/st 阅读全文
posted @ 2021-11-08 15:30 quanjun 阅读(38) 评论(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 阅读(27) 评论(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 阅读(50) 评论(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 阅读(24) 评论(0) 推荐(0) 编辑