博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[模板] 区间mex && 区间元素种数
阅读量:7286 次
发布时间:2019-06-30

本文共 632 字,大约阅读时间需要 2 分钟。

区间mex

问题

给定序列\({a_i}\), 每次询问给出\(l\), \(r\), 询问 \(\text{mex} \{a_i\}, i \in \{l, l+1, \cdots r\}\)

解法 (在线)

对于每个元素, 用 \(v_i\) 表示它最后一次出现的位置.

考虑到是区间询问, 使用主席树维护 \(v_i\) .

那么答案就是: 第 \(r\) 棵线段树上, 最小的 \(v_i < l\) 的值. 线段树上二分即可.

或者可以离线询问, 对 \(r\) 排序, 然后用线段树维护.

区间元素种数

问题

给定序列\({a_i}\), 每次询问给出\(l\), \(r\), 询问 \(\text{card} \{a_i\}, i \in \{l, l+1, \cdots r\}\), 其中\(\text{card}(S)\)表示集合\(S\)的元素个数. (相同元素记做一次)

解法

莫队 (离线)

不用说了吧... 板子题, 参考hh的项链.

主席树 (在线)

类似区间mex, 用 \(v_i\) 表示它最后一次出现的位置, 用主席树维护.

答案就是: 第 \(r\) 棵线段树上, \(l \le v_i \le r\) 的值的个数. 这显然是区间求和.

同样, 可以离线询问, 对 \(r\) 排序, 然后用树状数组/线段树维护.

转载于:https://www.cnblogs.com/ubospica/p/10386707.html

你可能感兴趣的文章
Spring Cloud 注册中心高可用搭建
查看>>
js 简单版本号比较
查看>>
Linux用户配置sudo权限(visudo)
查看>>
rocketmq 事物消息压测
查看>>
eclipse debug 多线程
查看>>
ubuntu System Settings 里面的内容显示不正常
查看>>
Udp传输入门
查看>>
什么是阻塞队列?如何使用阻塞队列来实现生产者-消费者模型?
查看>>
3.C#.Net 英汉词典的编写
查看>>
shell习题_6
查看>>
Ubuntu 14.04双显卡出现"未知显示器"问题
查看>>
Golang学习(15)——Unicode utf16包
查看>>
封装允许执行命令有超时
查看>>
一种字符编码猜测工具的实现方法
查看>>
LeetCode:Consecutive Numbers - 找出连续出现的数字
查看>>
23种常用设计模式简介
查看>>
自定义view步骤
查看>>
网卡故障:弹出界面eth0: 错误:没有找到合适的设备:没有找到可用于链接System eth0 的...
查看>>
【职场酸甜苦辣咸】大龄IT女汉纸的人生抉择点
查看>>
学习笔记--配置DHCP服务器(基于接口的地址池)
查看>>