
莫队算法
tiany7
人一我十,人十我万
展开
-
洛谷P4462 异或序列 (莫队)
2020.5.21 这道题,讲真,最难的部分在于怎么将转移在常数时间内算出,然而看到题目的前缀和我就在纸上推了推,异或满足交换律和前缀和的定义,所以就把a数组转化成前缀和的形式就行了,然后和k异或就能获得目标值,因为是前缀和,所以一定代表子序列,那么就简单了。 然而我发现了个问题,莫队跑出来结果貌似不对,完蛋,然后只能去看题解,发现l指针的位置如果设置为必须为1,以及询问需要从l-1开始,emmm,好吧,改了就过了。代码如下。 昨天520,看着空间满屏狗粮,我没什么感觉,按现状,自己可能快有npy了吧,但我原创 2020-05-21 12:16:53 · 328 阅读 · 0 评论 -
莫队算法:区间众数出现次数
2020.5.19 昨天学完莫队之后重写了一遍mcpc19的那一道区间众数的,发现了几个可以改进的点。一个是离散化,港真我不知道原题是怎么回事儿,上了离散化,后来无论是d-query还是路边的蒲公英好像完全没必要上离散化,毕竟是1e5个数字,开个数组记录下就行了,所以这部分删掉,然后模拟一下我们查询区间众数出现次数的方法,首先考虑加入坐标位置为x,数字为a[x],对于当前区间维护的答案的影响,首先要消除对于上一次a[x]出现的影响,那就是sum[cnt[a[x]]] -1, 然后将出现次数cnt[a[x]]原创 2020-05-19 11:04:00 · 1466 阅读 · 1 评论 -
洛谷P2709.小B的询问 (普通莫队)
2020.5.18 还是蛮有收获的,谁也没想到第一次自己写莫队能不看题解1A,激动。 这道题就是维护区间内所有数字出现次数的平方和。这要在平时肯定很难搞,至少我是想不出任何能够处理这个区间问题的树状结构,现在有莫队算法就可以做了。 首先老一套,分块,排序,这些都不用讲。主要是add和del函数,我们观察到,k范围比较小,可以开数组记录每个数字的出现次数,然后当区间加入一个数字的时候,首先要把上一层的贡献撤掉,就是cnt[a[x]]的平方,然后给这个数字的贡献再加上1,之后再在答案里加上平方就可以了,这些东西原创 2020-05-18 13:05:36 · 215 阅读 · 0 评论 -
浅谈莫队算法--洛谷P1972 HH的项链
2020.5.18 莫队算法之前有说过,区域赛那道题,但是当时我仍然不太理解莫队算法这个算法,只能寄希望于带板子上场到时候撕了这道题。然而,这并不太现实,要是想在区域赛干掉其它队伍去一趟nac光荣退役,靠板子显然不太现实。 区间众数出现次数请参见我上一篇farming mars的题解 最近终于能集中精力搞一下算法了(住嘴,你mysql还没开始学呢),cf现在能做到d了,待我打回蓝名。莫队这边,之前一直听人强调说我们能在O(1)时间内得知区间l和r到l-1和r+1的情况,一直在揣摩这句话,到底是个什么意思,没原创 2020-05-18 11:52:34 · 248 阅读 · 0 评论