• CF1270H


    CF1270H

    给出一个序列 (a),若对于 (i<j)(a_i<a_j) 则连一条 (i o j) 的边,求联通块个数。

    支持单点修改,保证任意时刻 (a) 互不相等。

    • (n,q le 5 imes 10^5,a_ile 10^6)

    ( m Sol:)

    先做一点观察,我们发现,连通块一定是一个区间。

    对于 ((i,j)) 假设两者之间有边,那么显然中间的点都与两者有边。

    于是问题等价于存在分界点,等价于分界点的数量 (+1)

    分界点的判定条件为不存在边跨过他,即左边最大值小于右边最小值。

    接下来又来一个很神的转换,考虑枚举权值,对于 (w),将小于 (w) 的权值置为 (0),大于 (w) 的权值置为 (1),那么最后其可以得到一个分界点,其合法等价于序列会构成 111000...

    方便起见,设 (a_0=infty,a_{n+1}=0),考虑对于每个 (w),我们维护其是否在序列中出现,以 (w) 为视角进行观察,序列中的 10 数量,容易发现至少有一对 10,且 10 数量恰好为 (1)(w) 就是我们所求,考虑通过线段树维护,当一次修改将 (a_i) 改为 (x) 之后,我们将步骤拆开,视为将 (a_i) 改为 (0),再改为 (x),对于 (win [a_{i+1},a_i])(w),本次修改会减少一组 10,而对于 (win [a_i,a_{i-1}])(w),本次修改亦减少一组 10,注意到线段树直接维护难以处理区间修改的标记下传,但是注意到不存在 (0)10,所以我们直接维护最小值且存在的出现次数即可。

  • 相关阅读:
    Ant: Class not found: javac1.8
    (转)ant 使用指南
    炼数成金(dataguru)IT技能修炼
    [原创]记我的6年测试经历
    CentOS6.5 安装并配置vsftpd
    炫龙炎魔T1笔记本 Win7 系统安装
    Oracl数据库+PL/SQL安装与配置
    C# 面试题
    Linux安装Python3后,如何使用pip命令
    CentOS7 Python2 和Python3 共存(Python3安装)【转】
  • 原文地址:https://www.cnblogs.com/Soulist/p/13656477.html
Copyright © 2020-2023  润新知