随笔分类 -  算法

摘要:我们要把N个集合,总共M个元素合并成一个大集合。 很容易得出,最坏的情况下需要合并N次,每次合并M个元素,也就是O(MN)的时间复杂度。 同样的问题,如果我们把小的往大的里合,是不是就快很多? 那么他的复杂度是多少呢? 考虑一个集合,被合并一次后他的大小至少乘2,那么他被合并的次数至多为$logn$ 阅读全文
posted @ 2021-06-27 17:48 小又又yyyy 阅读(80) 评论(0) 推荐(0)
摘要:(预计有很多博客要补,之前算法的复杂度分析也想补一补,有一场模拟赛要订正,还有KDTree要学) 线段树是一种容易维护区间的数据结构,是一种区间分治实体化的产物。 准确来说,比如你维护区间[L,R],其实就可以不断以中点分治下去。由于每次分治区间长度都会除以2,所以最多分治log层,就形成了线段树。 阅读全文
posted @ 2021-06-07 19:25 小又又yyyy 阅读(1045) 评论(0) 推荐(0)
摘要:解决问题: 这类问题一般是给你一个长度为 n 的序列,然后让你统计有一些特性的点对(i,j)有多少个,又或者说是找到一对点(i,j)使得一些函数的值最大之类的问题 算法流程: 找到当前序列中点mid 将所有的点分为三类 第一种是$1\leq i\leq mid\ 1\leq j\leq mid$ 第 阅读全文
posted @ 2021-05-08 10:44 小又又yyyy 阅读(82) 评论(0) 推荐(0)
摘要:整体二分的定义: 在信息学竞赛中,有一部分题可以使用二分的办法来解决。但是当这种题目有多次询问且每次询问我们对每个查询都直接二分,可能会收获一个 TLE。这时候我们就会用到整体二分。整体二分的主体思路就是把多个查询一起解决。(所以这是一个离线算法) 可以使用整体二分解决的题目需要满足以下性质: 询问 阅读全文
posted @ 2021-05-08 10:10 小又又yyyy 阅读(479) 评论(0) 推荐(0)
摘要:一、分块 分块的基本思想是,通过对原数据的适当划分,并在划分后的每一个块上预处理部分信息,从而较一般的暴力算法取得更优的时间复杂度。 我们将序列按每$s=\sqrt$个元素一块进行分块,并记录每块的区间和$sum_i$。 \(\begin{matrix}\underbrace{a_1+a_2+... 阅读全文
posted @ 2020-12-13 22:06 小又又yyyy 阅读(210) 评论(0) 推荐(0)