![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
莫队
Libra_Glow
不学dp是没有前途的(逃
展开
-
P4396 [AHOI2013]作业 莫队 + 树状数组
P4396题意:给定一个序列,m个询问,每次询问给定一个区间 [ l , r ] 和两个数 a b ,求这个区间中有多少数在 [ a , b ] 区间之间和有多少数出现在 [ a , b ] 之间。文字可能表述不好,下面给一组样例:序列 1 2 2询问 1 3 1 3 ( l , r , a , b )答案 3 2最近学莫队肯定是用莫队来搞了,显然 [ a , b ] 可以转换成前缀来搞,用两个树状数组来维护就行了,一个直接维护前缀个数,一个维护当前数是否出现即可。时间复杂度:O(NNlogN原创 2020-09-03 16:31:54 · 180 阅读 · 0 评论 -
P3604 美好的每一天 莫队 + 思维
传送门真是个练习卡常的好题呢题意:给定一个串,让后每次给定一个区间,问这个区间的子区间为回文子区间有多少个。这里的回文串是区间内字母重排之后是回文串即可。既然重排之后是回文就行,那么只需要知道这个区间内奇数的个数就行了。字母只有26个,那么可以状态压缩一下,用一个数组记录一下每一位即可。既然只关心个数的奇偶,那么可以用异或来判断。区间异或显然可以转换成前缀异或,假设当前区间为 [ x , y ] ,那么需要选择两个数 i j ∈ [ x - 1 , y ] ,使其异或值为 0 (此时奇数个数为0)原创 2020-09-03 14:37:00 · 124 阅读 · 0 评论 -
P3709 大爷的字符串题 莫队 离线求众数
传送门比赛卡题挂机先溜了离散化一下,让后记录一个cnt数组代表这个数出现次数,num数组记录出现次数为i的数有几个。让后直接维护就好了#pragma GCC optimize(2)#include<cstdio>#include<iostream>#include<string>#include<cstring>#include<map>#include<cmath>#include<cctype>#i原创 2020-09-01 22:02:03 · 129 阅读 · 0 评论 -
P4462 异或序列 莫队 + 异或技巧
传送门题意:给定一个k,一段序列。有m个询问,每次给定 [ l , r ] ,询问该区间内,有多少子序列满足异或和等于k。以下数组 x 为当前点的 value, a 为 x 的前缀异或和。看到区间异或和,不由的想到可以转换成前缀异或:a( l ) ^ a( l + 1 ) ^ … ^ a( r ) == a( l - 1 ) ^ a( r ) ,现在问题转换成了在 [ l , r ] 内是否存在两个数异或等于k。也就是 a [ x ] ^ a [ y ] = k 。让后看到了这个式子之后还是有点不可做原创 2020-09-01 15:18:52 · 224 阅读 · 0 评论