摘要: Joseph问题似乎是入门题,就是那个报数出圈的问题,不过它暴力模拟的复杂度是O(nm)的,如果题目的数据范围达到了30000,那就超时了。怎么用线段树维护呢? 我们可以这么考虑,每次我们其实要查询在当前这个点过了m个人是哪一个人。我们需要维护一下当前序列中一共有多少人,还需要维护每个人实际的位置在 阅读全文
posted @ 2018-10-05 23:50 CaptainLi 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 传送门 要做这道题我们需要两个前置技能:二维线段树和标记永久化。 我们使用一维线段树来维护一个序列,那我们想维护一个矩阵的时候,二维线段树应运而生。 二维线段树好像有两种实现方法。一是对于每一个节点(x轴上的每个点)在里面再开一棵线段树(表示一个y轴)(这好像更多人管他叫树套树做法?) 第二个是把它 阅读全文
posted @ 2018-10-05 23:43 CaptainLi 阅读(255) 评论(0) 推荐(0) 编辑
摘要: 今天的题目难度比昨天小一些,但是太菜的我还是啥也不会。 今天的出题大佬是Heaplex,他的题目中倒是出现了ZZQ,不知道是否是本人? T1.a 期望得分30,实际得分30 这道题开场发现好像有什么小小的规律,而且既然数据范围都到2*10^6了,这基本就是明示你要是用O(n)的算法了。 一开始我想了 阅读全文
posted @ 2018-10-05 23:16 CaptainLi 阅读(169) 评论(0) 推荐(0) 编辑
摘要: Tarjan求LCA是一种离线的LCA求法,它需要先知道所有的询问,之后通过dfs和并查集维护以求出LCA,这是一种线性的做法,如果有n个节点m次询问,那么复杂度为O(n+m)。 具体做法怎么做呢?其实就是dfs+并查集。 我们首先用链式前向星去存这棵树,存所有的询问关系(为什么一会再说),注意询问 阅读全文
posted @ 2018-10-05 00:17 CaptainLi 阅读(578) 评论(0) 推荐(0) 编辑