随笔分类 -  数据结构--分块

1
该文被密码保护。
posted @ 2022-02-24 18:51 __Anchor 阅读(1) 评论(0) 推荐(0)
摘要:题目 BSOJ1527&BZOJ4129 Haruna’s Breakfast 树上询问路径 \(mex\) 且带单点修改。 分析 首先区间 \(mex\) 问题可以使用莫队+值域分块或者回滚莫队解决。 这里带修的话就需要带修莫队+值域分块或者带修回滚莫队。 再加上这是树上,所以可以树分块过后莫队即 阅读全文
posted @ 2021-05-13 15:30 __Anchor 阅读(251) 评论(0) 推荐(0)
摘要:题目 P5501 [LnOI2019]来者不拒,去者不追 分析 首先观察发现是一个区间,然后就可以想到莫队。 然后考虑怎么维护。 我们发现单点修改的贡献就是(假设是 \(r+1\),其中 \(num\) 是 \([l,r]\) 中比 \(x\) 小的 \(a[i]\) 的个数+1):\((num+1 阅读全文
posted @ 2021-04-29 20:54 __Anchor 阅读(53) 评论(0) 推荐(0)
摘要:题目 P5047 [Ynoi2019 模拟赛] Yuno loves sqrt technology II 静态多次询问区间逆序对。 分析 二次离线莫队模板。 莫队是显然的,然后考虑怎么维护端点的移动,直接维护该怎么做:求当前区间多少个数比 \(x\) 大,多少个数比 \(x\) 小,可以离散化后直 阅读全文
posted @ 2021-04-29 20:42 __Anchor 阅读(49) 评论(0) 推荐(0)
摘要:题目 P4867 Gty的二逼妹子序列 给定一个序列,多次询问一个区间当中值域在 \([a,b]\) 当中的值的种类数。 分析 莫队+值域分块。 首先很明显可以莫队来维护这个区间信息。 然后考虑怎么维护这个 值域在 \([a,b]\) 当中的值的种类数。 需要支持 \(O(1)\) 修改,\(O(\ 阅读全文
posted @ 2021-04-27 12:08 __Anchor 阅读(101) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2021-04-27 00:14 __Anchor 阅读(0) 评论(0) 推荐(0)
摘要:题目 P4137 Rmq Problem / mex 给定一个序列,多次询问区间 \(mex\) 。 分析 主席树/莫队+值域分块/回滚莫队。 主席树 主席树做法很显然,直接每一个点新建一个树,然后询问就是在两个前缀主席树上差分二分就行了。 时间复杂度 \(O(nlogn)\) 莫队+值域分块 可以 阅读全文
posted @ 2021-04-26 23:29 __Anchor 阅读(121) 评论(0) 推荐(0)
摘要:题目 P5386 [Cnoi2019]数字游戏 给定一个序列,每次询问:给定 \(l,r,x,y\) ,问 \([l,r]\) 有多少个子区间满足其区间所有数使得 \(x\leq a_i \leq y\)。 \(n,q\leq 10^5\)。 分析 回滚莫队+序列分块。 首先这道题限制很多,但是可以 阅读全文
posted @ 2021-04-26 22:45 __Anchor 阅读(205) 评论(0) 推荐(1)
摘要:题目 P6578 [Ynoi2019] 魔法少女网站 第十分块。 分析 操作分块+序列分块。 首先我们考虑一下不用修改的话应该怎么做。 我们可以把题目这样转化:假设 \(x\) 目前给定,设 \(b[i]=(a[i]\geq x)\) ,那么我们现在的问题就是询问区间所有为 1 的极长子区间的 \( 阅读全文
posted @ 2021-04-26 21:31 __Anchor 阅读(180) 评论(0) 推荐(0)
摘要:题目 P4175 [CTSC2008]网络管理 树上单点修改,查询路径第 k 大。 解答 这道题做法很多,有 树剖+线段树+平衡树+二分 的,也有 树剖+可持久化线段树+树状数组 的,也有 可持久化线段树+差分+树状数组 的,还有就是 整体二分+树剖 的。 复杂度都是几个 \(log\) 的做法。 阅读全文
posted @ 2021-04-23 23:58 __Anchor 阅读(47) 评论(0) 推荐(0)
摘要:P5503 [JSOI2016]灯塔 值域分块+ST表,也可以决策单调性来做。 发现柿子写成 \(p=\max{h_j+\sqrt{|i-j|}}-h_i\) 。 中间的根号不太好处理,但是,我们突然发现,这个是下标之差开根,那么是不是说明其最大是 \(\sqrt{n}\) 的呢? 于是,我们可以考 阅读全文
posted @ 2021-04-22 17:12 __Anchor 阅读(45) 评论(0) 推荐(0)
摘要:CF940F Machine Learning 首先显然可以直接树套树做,在权值线段树上二分即可。 但是这里数据 1e5 并且可以离线,我们可以想到直接莫队/值域分块来做。 那么直接带修莫队暴力维护即可。 代码: #include<bits/stdc++.h> const int M=1e5+5; 阅读全文
posted @ 2021-04-21 19:48 __Anchor 阅读(42) 评论(0) 推荐(0)
摘要:CF1514D Cut and Stick 找一下规律会发现答案就是 \(1\) 或者 \(2x-(r-l+1)\) 。 然后问题转化成为求区间众数个数。 可以直接用 P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III 在线做或者用莫队离线做。 然 阅读全文
posted @ 2021-04-21 19:43 __Anchor 阅读(41) 评论(0) 推荐(0)
摘要:CF1000F One Occurrence 给定一个序列,询问区间内出现次数为 1 的数,输出任意一个。 很容易想到莫队,然后可以用一个 \(unordered_set\) 来维护,但是跑不过,于是我们可以考虑用一个栈来维护,也就是可以直接放到栈里,然后添加直接加,删除的话我们每次进去的时候会记录 阅读全文
posted @ 2021-04-20 23:39 __Anchor 阅读(50) 评论(0) 推荐(0)
摘要:P5064 [Ynoi2014] 等这场战争结束之后(值域分块+并查集) 建出操作树,离散化,然后并查集+值域分块维护。 代码: #include<bits/stdc++.h> #define PII pair<int,int> using namespace std; template <type 阅读全文
posted @ 2021-04-16 16:00 __Anchor 阅读(62) 评论(0) 推荐(0)
摘要:P6177 Count on a tree II/【模板】树分块 树分块板题。 树分块有很多种形式,可以按结点个数分块,深度分块...各有优劣。 具体可以看这里。 这里用的是按结点个数分块。 那么就可以这样来处理每一个询问: 设 \(u`\) 为 \(u\) 的块的根 ,\(v'\) 为 \(v\) 阅读全文
posted @ 2021-04-16 11:38 __Anchor 阅读(124) 评论(0) 推荐(0)
摘要:P5443 [APIO2019]桥梁 和P3247 [HNOI2016]最小公倍数很像。 对于边来说同样是两维限制,但是时间轴已经自动有序。 所以我们还是可以考虑分块。 对于当前块内的询问,首先我们把所有在当前不需要改变的边存下来,然后对于每一个询问可以双指针扫描即可,对于当前块内的边,每次询问的时 阅读全文
posted @ 2021-04-16 10:51 __Anchor 阅读(99) 评论(0) 推荐(0)
摘要:P3247 [HNOI2016]最小公倍数 先考虑如果只有一个限制该怎么做。 一个简单的思路就是离线下来,然后排序过后双指针扫描加边和处理询问即可,用并查集维护。 或者每次询问的时候都暴力遍历所有边然后并查集。 那么现在有了两个限制,单独并不好做 考虑优化这个过程,我们可以先按 \(a\) 排序然后 阅读全文
posted @ 2021-04-16 10:27 __Anchor 阅读(89) 评论(0) 推荐(0)
摘要:P5046 [Ynoi2019 模拟赛] Yuno loves sqrt technology I 询问区间逆序对,强制在线。 分块。 简单的来说就是预处理每个点到块首和块尾的贡献,还有块与块之间的贡献,还有前 i 个块对于值 j 的贡献。 询问的时候直接调用预处理的答案并归并两边散块即可。 代码: 阅读全文
posted @ 2021-04-15 23:38 __Anchor 阅读(68) 评论(0) 推荐(0)
摘要:P4135 作诗 每次询问一段区间中出现了偶数次的数有多少个。 可离线: 莫队。 直接暴力枚举每一个区间然后在每次加的时候判断一下即可。 强制在线: 分块。 和蒲公英很类似的处理办法,要预处理的有: 所以每次询问就相当于先找一下预处理的答案。然后枚举两个小块,然后枚举在这两个块中出现的每一个元素就可 阅读全文
posted @ 2021-04-15 23:29 __Anchor 阅读(46) 评论(0) 推荐(0)

1