【2020.11.20提高组模拟】祖先(ancestor) 题解

题目描述

对于每个\(i\),它都要往前面拜访它的祖先。对于\(i\)之前的编号为\(j\)的节点,如果要拜访的话需要满足对于\(\forall k\in (j,i],j是k的祖先\)。

\(n \le 2*10^6+2*10^5\)。

Solution

首先如果用对于每一个\(i\)向前枚举\(j,k\)再判断\(LCA\)或其他暴力等做法的话,时间复杂度\(O(n^4),O(n^3)\)不等。

考虑反过来计算每一个j对其后代的贡献。

首先显然如果有\(i\)将会在\(j\)产生贡献,\(j\)一定是\(i\)的祖先,反过来就是\(i\)在\(j\)的子树内,同时\([j,i]\)这段区间都应该在\(j\)的子树内。

如果记录\(dfn\)序之后,我们就可以把这个约束条件写成:

\[\forall i\in[j,n],dfn_j\le dfn_i\le dfn_j+size_j
\]

左右拆分,发现可以ST表+二分/倍增得到\(dfn\)的答案区间。

预处理ST表后询问都是\(O(n\log n)\)的。

Code-\(O(n\log n)\)

Std

如何不用把二分变成线性的呢?伟大的\(\texttt{Tommy0103}\)用在跑操时想到了如何像题解一样想出了如何用单调栈维护!

如果\(i\)在\(j\)的子树中

\[dfn_j\le dfn_i\le dfn_j+size_j
\]

那么\(i\)的子树也当然都在\(j\)的子树内

\[dfn_j\le dfn_i\le dfn_i+size_i\le dfn_j+size_j
\]

就可以分成两个单调栈在线性时间复杂度内维护了!

Code

【2020.11.20提高组模拟】祖先(ancestor) 题解的更多相关文章

  1. 【2020.11.28提高组模拟】T1染色(color)

    [2020.11.28提高组模拟]T1染色(color) 题目 题目描述 给定 \(n\),你现在需要给整数 \(1\) 到 \(n\) 进行染色,使得对于所有的 \(1\leq i<j\leq ...

  2. 【2020.11.28提高组模拟】T2 序列(array)

    序列(array) 题目描述 ​给定一个长为 \(m\) 的序列 \(a\). 有一个长为 \(m\) 的序列 \(b\),需满足 \(0\leq b_i \leq n\),\(\sum_{i=1}^ ...

  3. 【2020.11.30提高组模拟】剪辣椒(chilli)

    剪辣椒(chilli) 题目描述 在花园里劳累了一上午之后,你决定用自己种的干辣椒奖励自己. 你有n个辣椒,这些辣椒用n-1条绳子连接在一起,任意两个辣椒通过用若干个绳子相连,即形成一棵树. 你决定分 ...

  4. 【2020.11.30提高组模拟】删边(delete)

    删边(delete) 题目 题目描述 给你一棵n个结点的树,每个结点有一个权值,删除一条边的费用为该边连接的两个子树中结点权值最大值之和.现要删除树中的所有边,删除边的顺序可以任意设定,请计算出所有方 ...

  5. JZOJ 【2020.11.30提高组模拟】剪辣椒(chilli)

    题目大意 给出一棵 \(n\) 个节点的树,删去其中两条边 使得分出的三个子树大小中最大与最小的差最小 分析 先一边 \(dfs\) 预处理出以 \(1\) 为根每个点的 \(size\) 然后按 \ ...

  6. JZOJ 6904. 【2020.11.28提高组模拟】T3 树上询问(query)

    题目 你有一棵 \(n\) 节点的树 ,回答 \(m\) 个询问,每次询问给你两个整数 \(l,r\) ,问存在多少个整数 \(k\) 使得从 \(l\) 沿着 \(l \to r\) 的简单路径走 ...

  7. 11.5NOIP2018提高组模拟题

    书信(letter) Description 有 n 个小朋友, 编号为 1 到 n, 他们每人写了一封信, 放到了一个信箱里, 接下来每个人从中抽取一封书信. 显然, 这样一共有 n!种拿到书信的情 ...

  8. 【2020.12.01提高组模拟】卡特兰数(catalan)

    题目 题目描述 今天,接触信息学不久的小\(A\)刚刚学习了卡特兰数. 卡特兰数的一个经典定义是,将\(n\)个数依次入栈,合法的出栈序列个数. 小\(A\)觉得这样的情况太平凡了.于是,他给出了\( ...

  9. 【2020.12.03提高组模拟】A组反思

    估计:40+10+0+0=50 实际:40+10+0+0=50 rank40 T1 赛时看到\(n,m\leq9\),我当机立断决定打表,暴力打了几个点之后发现在\(n\ne m\)且\(k\ne0\ ...

  10. 【2020.12.01提高组模拟】A组反思

    105,rk45 T1 赛时一开始先打了\(m=0\)的情况,也就是普通的卡特兰数,然后打了暴力,样例过了,把样例改改就不行了,原因没有保证是枚举的是合法的出栈序列 得分:\(WA\&TLE1 ...

随机推荐

  1. git 命令手册【不定时更新】

    本地分支 --> 远程服务器 git add xxx git commit -m "xxx" git push origin xxx 远程服务器 --> 本地分支 gi ...

  2. WordPress域名更换小记

    WordPress域名更换记录 1.准备工作 ​ 在开始之前,要有一个全面的备份,包括网站的文件和数据库.这确保了如果出现问题,你可以恢复到更改之前的状态.不然中间卡壳直接连后台都打不开了,只能重装. ...

  3. Swarm集群部署、集群架构、集群管理 、服务管理

    一.部署swarm集群 #docker swarm简介 Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose ...

  4. DFS 2025/1/15

    DFS & DFS 剪枝优化 Basic 01 先搜节点少的分支 如果搜进来一个大分支而答案不在此分支就会浪费大量时间 02 可行性剪枝 已经白扯了就 return 判断当前是否合法 03 最 ...

  5. 一文搞懂油猴(篡改猴)脚本中window和unsafeWindow的关系

    先看第一段代码:特点是grant none // ==UserScript== // @name test // @match https://1.1.1.1/ // @grant none // = ...

  6. 【C#】VS2019新建C#类自动添加作者版权等信息

    VisualStudio2019新建C#类自动添加作者版权等信息 问题: 新建C#类的时候经常需要手动添加注释和版权等信息,那么如何新建类的时候就让编译器自动添加好这些信息呢? 解决: 参考网上的资料 ...

  7. SQL Server 2008语句大全完整版

    --======================== --设置内存选项 --======================== --设置 min server memory 配置项 EXEC sp_co ...

  8. PandasAI:当数据分析遇上自然语言处理

    数据科学的新范式 在数据爆炸的时代,传统的数据分析工具正面临着前所未有的挑战.数据科学家们常常需要花费70%的时间在数据清洗和探索上,而真正的价值创造时间却被大幅压缩.PandasAI的出现,正在改变 ...

  9. AI时代:开源大模型选择

    https://docs.llamaindex.ai/en/stable/module_guides/models/llms.html 可以按参数和评分来选择模型: https://huggingfa ...

  10. 使用傅里叶级数和Python表示方波

    引言 在信号处理和数字通信中,方波是非常常见的一种波形.方波是一种周期性波形,信号在两个固定的幅度之间跳跃,通常是"高"与"低"的状态.你可能会问,如何通过数学 ...