莫队算法初

emmmm,上周的比赛遇到莫队了,然而只会线段树。

特地学习一下。
参考博文: 洛谷日报

普通莫队(参考洛谷日报)

莫队算法一般分为两类,一是莫队维护区间答案,二是维护区间内的数据结构。
一般用于处理只有询问不用修改的区间问题(不过后面也有带修莫队啦)
对于区间问题来说,我们会想到线段树,但是线段树的复杂度过高,并且对于一些问题来说
例如:给出m个询问[L,R],求区间内出现次数大于等于3的个数?用线段树的话我们还是要暴力合并左右儿子:这样就不能直接o(1)从左右儿子转移到父亲,甚至是o(左儿子长度+右儿子长度),然后就凉了呗…

先看一个比较简单的问题: 给一个序列,m次询问,每次询问你区间 [ l , r ] [l,r] [l,r]有多少种不同的颜色。 n , m ≤ 100000 n,m \leq 100000 n,m100000

  1. 最简单的暴力。最极致的超时?

对于每一次询问 q u e r y [ l , r ] query[l,r] query[l,r] 我们都进行遍历一次来找不同的颜色
显然复杂度是 O ( n m ) O(nm) O(nm) 的,很明显这会TLE

2.优美的暴力你爱吗?
换一种方式进行暴力,也是莫队算法的基础
我们定义 q l ql ql q r qr qr,代表当前区 间 N o w Q u e r y [ q l , q r ] 间NowQuery[ql,qr] NowQuery[ql,qr]内有多少种颜色
再定义一个cnt数组, c n t i cnt_{i} cnti表示第i种颜色在 Q u e r y [ q l , q r ] Query[ql,qr] Query[ql,qr]内出现了多少次。
对于每一个询问 Q u e r y [ l , r ] Query[l,r] Query[l,r],我们会挪动 l l l q l ql ql, r r r

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值