zoukankan      html  css  js  c++  java
  • 区间求mex的几种方法

    Tags : 总结 莫队 线段树

    区间取mex的几种方法

    题目大意

    无修改,求区间 (mex)

    做法1

    莫队+二分+树状数组
    树状数组维护维护桶,每次扫完二分答案,用树状数组判断
    (O(nsqrt n log n))

    做法2

    莫队+分块
    分块维护桶,若块内满,则答案不在这一块,否则进去找
    (O(nsqrt n))

    做法3

    权值线段树+离线
    预处理nxt数组(a[nxt[i]]=a[i])
    可以发现(i+1dots nxt[i]-1)中不会出现(a[i])
    对于一个询问,我们就是要找不出现区间包含询问区间的值
    把询问离线下来即可
    注意把整个数组中都没有出现过的也要算上
    还有一个数第一次出现前是可以贡献答案的

    做法4

    类似做法3的
    我们不离线
    询问相当于一个矩形
    不出现区间看作二维的点
    我们相当于询问矩形内最小值
    树套树/kd-tree/cdq分治
    cdq分治的方法:
    对于询问的矩形按左端点x为关键字,对于二维点按x为关键字
    分成两个区间,每次考虑用右边的点贡献左边的询问
    将左半边的矩形右端点x和右半边的二维点x放在一起再排个序
    用线段树维护y维即可

    强制在线?

    做法4中
    树套树/kd-tree是满足要求的

  • 相关阅读:
    第 9 章 类
    导入模块
    第 8 章 函数
    第七章 用户输入和while语句
    第六章 字典
    测试经理/组长职责
    测试的发展之路
    【转】测试流程
    一个网页通用的测试用例(借鉴他人的保存,加注释)
    QTP自动化测试框架简述
  • 原文地址:https://www.cnblogs.com/acha/p/6263977.html
Copyright © 2011-2022 走看看