![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
其他算法
run around
这个作者很懒,什么都没留下…
展开
-
根号分治
当我们会碰到这样一类问题时,长度为n的序列,m个询问(通常n和m同阶)。可能存在两种比较显然的方法,一种是O(n^2)预处理O(1)回答,一种是不预处理O(n)回答m个询问,当然这两种方法都是O(n2)的。这时候我们就可以考虑根号分治,将这两种算法糅合在一起,达到一个nsqrt(n)的效果。 题目: 给定n个集合,输出是否存在两个集合,他们至少有两种元素相同,集合总数不超过2e5。 分析: 对于这个题目,可以想到两种暴力的方法。1.对于每个集合,暴力查找别的集合是否与其匹配。2.预处理出所有的二元对,查看他原创 2021-03-17 20:48:29 · 1092 阅读 · 2 评论 -
莫队算法
/* 莫队算法:用于处理离线的区间问题 复杂度O(nsqrt(n)) 1.将元素分块 2.将查询离线排序,按左区间的块编号排序,相同按右区间大小排序 3.维护一个当前的区间,根据访问的区间将左右区间扩张或收缩 */ #include <iostream> #include <cmath> #include <algorithm> using namespace std; typedef long long ll; const int maxn = 5e4 + 5;原创 2020-08-26 16:14:40 · 86 阅读 · 0 评论 -
三分算法
三分搜索的实现主要是判断midl和midr所在值的大小。以凸函数为例,先以l和r为端点计算出它们的中点midl,然后再以midl和right为端点计算出它们的中点midr,接下来就需要判断f(midl)和f(midr)值的大小了,如果f(midl)大于f(midr),那么说明(midr,r]这个区间的值不会比midl来的大,此时令r=midr。否则则令l=midl。由于两个值可能会相等,且有可能正...原创 2020-02-14 19:57:23 · 317 阅读 · 0 评论