zoukankan      html  css  js  c++  java
  • jzoj6424

    在集训队作业 line 中,单调栈的限制很难处理。
    但是顺着一个点往左边第一个比他大的点跳,则我们得到了可以转移的连续段。
    考虑把一个点向左边第一个比它大的点连边,则形成了一棵树。
    使用树链剖分+线段树即可维护。
    回到此题。
    求出一个点(i)向左/右跳到的第一个合法的区间位置(l_i,r_i)
    这可以使用一个栈求出。
    先考虑栈顶的元素(x),如果(l_i leq xleq r_i),则显然(x)(l,r)可以用于更新(i)(l,r)
    然后把(x)插入栈中。
    发现(x)的区间一定包含了栈顶元素的区间,所以栈顶的元素不会对后面的产生影响,可以弹出。
    这保证了时间复杂度。
    然后考虑把一个点(i)(l_i)连边,则形成了树。
    这棵树上一个点向父亲跳即可找到以它为右端点的合法区间。
    那么一个询问显然答案就是两个点的(lca)的深度。

  • 相关阅读:
    KDJ回测
    利用网易获取所有股票数据
    利用东方财富网获取股票代码
    python发邮件
    用指针向数组插入元素
    冒泡排序
    Hadoop的安装与配置
    关于执行memcached报错问题
    tomcat Linux安装
    网易CentOS yum源
  • 原文地址:https://www.cnblogs.com/ctmlpfs/p/13952468.html
Copyright © 2011-2022 走看看