↓ Skip to main content
  1. Posts/

莫队算法总结

·234 words·1 min
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

写了几道莫队,总结下。 目前只会区间莫队。。树上莫队以后再补。

莫队算法学习

说说我自己的理解: 莫队算法是一类用来处理离线静态区间问题的算法。 必须是离线,而且对区间没有修改。 还要满足,如果我们知道区间[l,r]的答案,那么知道区间[l-1,r],[l+1,r],[l,r-1],[l,r+1]的答案都是平凡的。。也就是O(1)可以实现才可以。

本质的话。。感觉就是分块+暴力? 通过离线操作,把查询按照某种顺序均分使得复杂度降低。

除了bzoj的权限题。。。区间莫队基本都A掉了。

Related

hdu 5145 NPY and girls

http://acm.hdu.edu.cn/showproblem.php?pid=5145 题意:有n个女孩,编号1..n,第i个女孩在第a[i]个教室,m次访问,每次访问编号[L,R]的女孩,处于同一个教室的女孩一次只能访问一个,问有多少种访问方案。两个不同的方案当且仅当访问的顺序有所不同。

codeforces #340 div 2 E XOR and Favorite Number

·976 words·2 mins
http://codeforces.com/contest/617/problem/E 题意:给出n个数,m个查询,每个查询给定l,r,问在区间【l,r】内,有多少对i,j,满足i^(i+1)^(i+2)^…^j的值为给定的常数k. 思路:学了莫队算法以后。。。这题果然是莫队的一眼题。

hdu 5213 lucky (莫队算法)

·1153 words·3 mins
http://acm.hdu.edu.cn/showproblem.php?pid=5213 题意:n个数,m个查询,每个查询由4个数l1,r1,l2,r2构成,询问分别从[l1,r1]和[l2,r2]中各取一个数,和为给定的常数k的方案数。 思路:首先分别由两个区间取数不好搞,我们可以用容斥原理对区间变换。这是这道题最关键的一步。

codeforces 220 B. Little Elephant and Array

·603 words·2 mins
http://codeforces.com/contest/220/problem/B 题意:n个数,m个查询区间,对于每一个区间[l,r]输出区间中cnt[x]==x的数的个数。 # 思路:首先,a[i]很大。。。但是n最大才1e5…每个a[i]最多出现1E5次。。所以对于大于1E5的a[i]对答案没有贡献。其次,上莫队算法。

codeforces 86 D. Powerful array (莫队算法)

·556 words·2 mins
http://codeforces.com/problemset/problem/86/D # 题意:Ks为区间内s的数目,求区间[L,R]之间所有KsKss的和 # 思路:莫队算法,和小z的袜子差不多。不明白第一次tle#54是什么情况。把每一块的大小改成了常数之后就过了。 # 再交一遍就过了。。不过貌似根据最大数据把siz大小设置成一个常数比根号n要块很多==