分块查找算法
HT008_123
家人们点点关注叭
展开
-
BZOJ 2102 数颜色
链接 本题有两种解决方式 1:分块 2:莫队 其实都是差不多的。 先给出分块的方法。初始化将整个数组分为若干块。 spre[i]表示在i之前与i相同颜色最近的那个画笔位置。 在每一块里,将pre[i]升序排列。查询若 查询 的[l,r][l,r]在一个块内,我们可以直接暴力查找。 很明显,当spre[i]< l时,即为一个不同的颜色。 当 查询 的[l,r][l,r]不在一个块内时原创 2018-01-05 09:21:52 · 203 阅读 · 0 评论 -
初识 块状数组
问题 给出一个长串,然后给出n个操作,操作有两种,在某个位置插入一个字符,或者查询第x个位置上的字符是什么对于这个问题,我们有两种解决方案。1:数组查询 O(1) 但是插入最坏可以达到 O(len)2:链表插入 O(1) 但是查询最坏也可以达到O(len)所以如何优化这个问题。这里介绍一种数据结构——块状数组何为块状数组?普通的数组,每个节点都是连续的。原创 2018-01-04 20:47:15 · 431 阅读 · 0 评论 -
[HEOI2015] 公约数数列
题目描述:题目分析:分块,块内维护 前缀gcd 前缀Xor 修改暴力重构 查询时若gcd(gcd(块尾,pregcd))==pregcd,则说明本块内的所有数都不影响gcd 二分查找符合要求的Xor 否则暴力查询题目链接:Luogu 4108 BZOJ 4028Ac 代码:// luogu-judger-enable-o2#include <cstd...原创 2018-03-18 08:56:14 · 486 阅读 · 0 评论 -
[Luogu 3674] 小清新人渣的本愿
题目描述:雾题目分析:介绍一种很牛的东西 bitset 相减出x只需要查询(a&(a< < x)).any()即可 +法 维护一个反的bitset即可 乘法枚举因数即可 O(m*(sqrt(n)+ c / 64))题目链接:Luogu 3709Ac 代码:// luogu-judger-enable-o2#include ...原创 2018-04-14 18:12:26 · 216 阅读 · 0 评论 -
[Luogu 3396] 哈希冲突
题目描述:qwqqq题目分析:暴力如何求解呢?for(int i=k;i<=n;i+=p) ans+=val[i];考虑预处理 ans[i][j]表示模数为i时内存池j的和for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) ans[j][i%j]+=val[i];这样处理是O(N2)O(N2)O...原创 2018-04-11 14:11:45 · 114 阅读 · 0 评论 -
[Luogu 2801] 教主的魔法
题目描述:给出N个数字 M l r c 给 l - r的数字加c A l r c 查询 l - r >=c的数字个数题目分析:区间加!线段树 线段树不能维护第二个操作啊(雾 分块吧qwq 我们维护一个块的整体加值就好啦题目链接:Luogu 2801Ac 代码:#include <cstdio>#include <io...原创 2018-04-11 14:12:27 · 179 阅读 · 0 评论