zoukankan      html  css  js  c++  java
  • 主席树(静态区间第k大)

    前言

    如果要求一些数中的第k大值,怎么做?
    可以先就这些数离散化,用线段树记录每个数字出现了多少次。
    。。。
    那么考虑用类似的方法来求静态区间第k大。

    原理

    假设现在要有一些数
    我们可以对于每个数都建一棵新的线段树,用来记录出现每个数字出现了多少次的前缀和。
    那么假设要求区间[l,r]的第k大,将第r棵线段树减去第l-1棵线段树,像上面求所有数的第k大一样来求就可以了。
    但是,对于每一个数都建一个线段树显然会爆空间。
    现在考虑如何节约空间。
    假设现在有四个数1 4 2 3,依次加入,可以这样处理
    这里写图片描述红色线是连到前一棵树的
    由图得,原理就是:
    对于每个被修改的位置,新建一个点。而没有被修改的点与修改前的线段树上的点共用

  • 相关阅读:
    随机数表示方法
    何时用重定向何时用转发
    http中重定向和请求转发
    Java正则表达式
    自定义圆形的ProgressBar
    Android内存管理机制
    Android 安全机制
    8位颜色值的含义
    Shape使用
    Bitmap(三)
  • 原文地址:https://www.cnblogs.com/chen1352/p/9043522.html
Copyright © 2011-2022 走看看