02 2021 档案
摘要:原来学习最小生成树的时候写了道题,发现得用最近公共祖先迫于无奈便学了LCA(不过确实很有用) LCA主要基于一种倍增的思想,和st表很像,通过预处理数据来花费空间换取时间。 要想学习怎么求LCA首先要学习LCA是什么。 在一颗数中,比如说图中的4和5,那么他们的最近公共祖先便是2。 如果是2和3他们
阅读全文
摘要:刷题单的时候刷到了st表,学了好久才学会,不过st表的模板题用线段树也能过不知道学来干嘛 其实st表还是有用的 建一颗线段树的时间复杂度是nlogn,建st表的时间复杂度也是nlogn,但是在查询区间最值的时候线段树的时间复杂度是logn而st表是O(1)要快一丁点。 要想实现st表我们首先需要一个
阅读全文
摘要:在学习了著名的数据结构线段树之后,急切地想找几个题来写写,于是随便找了一题,谁知道一调就是一个晚上,终究还是太菜了。 P1966 [NOIP2013 提高组] 火柴排队 题目中要我们求经过多少次变换之后使得火柴之间的距离最短。 很容易我们就可以知道,当第一列火柴的第k长的火柴和第二列火柴的第k长的火
阅读全文
摘要:好久没写题了,拼死拼活才写了道绿题。 P1419 寻找段落 题目中要我们求一段数列的平均值,这段数的长度被限定在S-T之间。 那么我们可以用二分法枚举答案,之后来寻找区间,如果这些区间之中有一个区间中的数减去二分出的答案的和要比二分出的答案要大, 则说明这个二分答案比我们要求的真正的答案要小,则改变
阅读全文
摘要:想要理解算法,最有效的方式就是看例题了。 所以我们就看这道模板题 P1886 滑动窗口 /【模板】单调队列 刚开始我还不知道单调队列是个什么东西,但是大概知道要用一个双向的队列来写,于是就想到了multiset+queue。 我们首先把数字一个一个放到队列和multiset中,当我们发现队列的siz
阅读全文
摘要:在学习迪杰斯特拉算法之后,听说它可以被优化,但一直没有学习。 因为听到线段树,斐波那契堆就怕。 后面发现优先队列也可以实现优化,不过关于重载运算符那时候却没怎么懂现在终于会了。 我们在使用迪杰斯特拉算法的时候每次都要使用起点位置最短的点,如果每次都遍历的化时间复杂度会到达n^2。 于是我们就可以创建
阅读全文
摘要:欧拉筛作为效率极快的线性筛在竞赛中极为重要,所以刚接触竞赛不久就学习了,但是有关其可行性却一直没有了解,今天终于学了。 int n, cnt = 0; int zs[1000005]; bool vis[100000001]; void ol() { for (int i = 2; i <= n;
阅读全文