首页 > 其他分享 >Contest7506 - 莫队 分块

Contest7506 - 莫队 分块

时间:2024-07-31 20:50:13浏览次数:6  
标签:frac log 分块 复杂度 sqrt 查询 莫队 Contest7506

Contest

A 至少重复三次的数字

莫队板子。

B 小明的习题集

洛谷原题 P1494 [国家集训队] 小 Z 的袜子

C 棋子的颜色

洛谷原题 P1903 [国家集训队] 数颜色 / 维护队列

带修莫队:

普通莫队是二维问题,现在加上一维时间轴,做法基本上同普通莫队。

对询问 \((l,r,t)\) 排序时,第一关键字 \(pos_l\),第二关键字 \(pos_r\),第三关键字 \(t\)。

在时间轴上移动时,注意:

  • 只有移动出现在 \([l,r]\) 才能造成贡献
  • 执行过操作之后,要把操作改成撤回的样子
// u 是修改序列,q 是查询序列
void upd(int x /*当前查询操作的索引*/, int t /*当前时间*/) {
    if (q[x].l <= u[t].x && u[t].x <= q[x].r) { // 在 [l, r] 内才有贡献
        del(a[u[t].x]);
        add(u[t].k);
    }
    swap(a[u[t].x], u[t].k); // 改造成撤回
}

时间复杂度

令各种东西同阶。

TODO: 一通分析

取块长 \(B = \Theta(n^{\frac 2 3})\) 可得时间复杂度 \(O(n^{\frac 5 3})\)。

D 数列分块入门-1

LOJ 原题 #6277. 数列分块入门 1

简要题意:区间加、单点查询。

分块板子。

区间加:散块暴力,整块打加法标记,\(O(\frac n B + B)\)。

单点查询:直接查,\(O(1)\)。

令 \(B \in \Theta(\sqrt n)\) 可得最优复杂度 \(O(q \sqrt n)\)。

E 数列分块入门-2

LOJ 原题 #6278. 数列分块入门 2

简要题意:区间加、区间查询 \(\sum\limits_{i=l}^r [a_i < k]\)(\(k\) 不固定,随询问给出)。

预处理:将每块内部排序。

区间查询:散块暴力,整块二分,\(O(\frac {n \log B} B + B)\)。

区间加:整块打加法标记,散块暴力后暴力重新整块排序,\(O(\frac n B + B \log B)\)。

令 \(B \in \Theta(\sqrt n)\) 可得最优复杂度 \(O(q \sqrt n \log n)\)。

区间加精细一点:散块暴力后,没加的和加过的分别是两个有序序列,归并,\(O(\frac n B + B)\)。

令 \(B \in \Theta(\sqrt {n \log n})\) 可得最优查询复杂度 \(O(q \sqrt {n \log n})\)。

据说可以用分散层叠进一步优化,但是我不会。。。

标签:frac,log,分块,复杂度,sqrt,查询,莫队,Contest7506
From: https://www.cnblogs.com/AugustLight/p/18335456

相关文章

  • 分块矩阵方法
    分块矩阵法是高等代数中处理矩阵相关问题的最重要的方法之一,其重要性可以说怎么强调都不过分.分块矩阵法的核心思想是根据具体问题构造适当的分块矩阵,然后运用广义初等变换,将某些子块消为零块,得到特殊的分块矩阵从而解决问题.该方法几乎贯穿了线性代数的始终,在矩阵求......
  • 基础数论 整除分块与欧拉函数
    整除分块:例题:已知\(f(n)=\sum\limits_{i=1}^{n}\left\lfloor\frac{n}{i}\right\rfloor\),给定\(n\),求\(f(n)\)的值。固然可以\(O(n)\)暴力,但显然会\(TLE\)。计算一下前几项的值之后可以发现\(\left\lfloor\frac{n}{i}\right\rfloor\)的取值在连续的一段区间内是......
  • 分块:优雅的暴力
    分块是一种思想,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。分块的应用面十分广泛,包括但不限于数组、树形结构等。1.块状数组块状数组是分块思想最简单的应用。它将一个数组分成若干块,然后对数组进行区间操作。对......
  • 分块
    分块数列分块入门4区间修改区间查询区间修改正常。但是区间查询有几个需要注意的点:1.需要取模。(这里对喜欢疯狂取模的人我提个醒:千万不要在bl[l]=...那里取模啊,把块数给模了就完全错了,还有一些不能模的地方一定要看清楚!!!)2.用懒标记算答案的时候一定要乘上r-l+1,别单点......
  • 使用 AES-GCM 分块加密文件
    我想编写一个生成器,以给定大小的块来加密文件并一一返回块。我还想验证有效负载,因此我为此选择了AES-GCM。为什么我要分块加密而不是一次性加密整个文件?我通过网络发送这些块,因此我不是加密整个(可能很大)文件,将其存储在其他地方,然后在进行网络传输时再次对其进行分块,而是加密......
  • 整除分块
    整除分块为什么放在\(9.\)这个板块捏?感觉前面很多地方都会浅浅涉及建议阅读数论函数基础章节,了解基本概念与先要知识又称数论分块,因其解决的问题与整除密切相关而得名,常用于求解形如\[\begin{aligned}\sum_{i=1}^n{f(i)g\left( \left\lfloor \df......
  • 【数据结构】【模板】莫队
    莫队使用场景离线算法;区间询问不断修改。能用\(O(1)\)的时间复杂度从\([l,r]\)到\([l+1,r]\)或者\([l,r-1]\)。原理原问题可以转化为为建立一个坐标轴,对于一个询问\((l,r)\),相当于点\((l,r)\),从一个询问\((a,b)\)到\((c,d)\),可以理解为点\((a,b)......
  • 莫队
    莫队假设\(n,m\)同阶,对于序列上的区间询问问题,如果得知\([l,r]\)的答案,可以在\(O(1)\)的时间推算出\([l-1,r],[l+1,r],[l,r-1],[l,r+1]\)的答案,那么我们就可以在\(O(n\sqrt{n})\)的时间求出所有询问的答案。普通莫队实现将所有的询问离线后以左......
  • 二次离线莫队
    更新答案不是\(O(1)\)?答案可差分?二离来啦。P4887【模板】莫队二次离线先考虑贡献:\(f(x,[l,r])\)表示\(x\)对区间\([l,r]\)。考虑莫队每次的移动:\(r\tor'\)。答案增加为:\[\sum_{i\in[r+1,r']}f(i,[l,i-1])=\sum_{i\in[r+1,r']}f(i,[1,i-1])-f(i,[1,l-1])\]发现前......
  • 莫队
    普通莫队DQUERY-D-query先想一下最朴素的暴力怎么写。显然可以用一个\(cnt\)数组记录每种元素的出现次数,然后如果这种元素是第一次出现,则增加答案,时间复杂度\(O(nq)\)。然后考虑如果如何用一个已经求出来答案的询问推出另外一个询问的答案。显然我们要增加一部分数和删掉......