根号算法——分块
又又大柚纸
山东大学
展开
-
数列分块入门 2 (区间排名)
【题目链接】 LOJ #6278. 数列分块入门 2【解析】 查询一个数在区间内的排名,可以用树套树、分块解决。分块虽然效率较低,但实现简单、且常数较小。而且可以支持区间修改。 对于每个块,将其在内部排序。查询时块内二分、边角暴力;修改时块内打标记、边角暴力修改后将其所在块重新排序。【代码】#include<iostream>#include<vector...原创 2018-07-12 22:49:09 · 970 阅读 · 0 评论 -
数列分块入门 3 (区间前驱)
【题目链接】 LOJ #6279. 数列分块入门 3【解析】 考虑到前驱满足区间可加性,于是在每个块内套一个 set,边角的暴力,枚举即可。注意加法标记和边角修改后 set 也要随之修改。【代码】#include<bits/stdc++.h>using namespace std;const int maxn = 1e6 + 10;int n, len, ...原创 2018-07-12 22:54:13 · 542 阅读 · 0 评论 -
数列分块入门 6 (元素动态插入)
【题目链接】 LOJ #6282. 数列分块入门 6【解析】 Splay 。。。 这是分块的题。。。 还是老老实实用分块吧,在每个块内开一个 vector 或 list。 但是当数据不随机时,可能会出现一个块内有很多很多很多很多个元素的情况,这时候需要将每个块重构,或者在 sqrt(n) 次操作后重构,以保证时间复杂度。【代码】#include<bits/stdc++....原创 2018-07-12 23:19:26 · 588 阅读 · 0 评论 -
[Violet]蒲公英
解析区间众数查询,强制在线。 首先要把a[]离散化。 分块处理。 区间[l, r]的众数,只存在两种情况: (1) 区间[L, R],的众数,L, R为[l, r]内最大块的左右端点。 (2) 区间[l, L - 1]或[R + 1, r]中的数。 情况(1) 可直接预处理。 情况(2) 扫描区间[l, L - 1]或[R + 1, r]中的数,二分查找其在[l, r]中第一次和...原创 2018-06-27 21:45:20 · 404 阅读 · 0 评论