正题


题目大意

一棵二叉树,有点权。求修改最少的点使得这是一个BSTBSTBST。


解题思路

二叉查找树满足点权的中序单调递增。

所以跑一遍中序遍历,就变为了求修改多少遍使一个序列单调递增。

求最长上升就好了。可是要求修改的是整数,所以需要将条件改为ai−aj≥i−ja_i-a_j\geq i-jai​−aj​≥i−j

然而O(n2)O(n^2)O(n2)过不了,我们先将上面那个式子移项为ai−i≥aj−ja_i-i\geq a_j-jai​−i≥aj​−j

所以先让ai−ia_i-iai​−i,然后跑一遍O(nlogn)O(n\ log \ n)O(n log n)的LISLISLIS就好了。


codecodecode

#include<cstdio>
#include<algorithm>
#define N 500010
using namespace std;
int n,w[N],son[N][2],a[N],f[N],cnt,tail,q[N];
void dfs(int x){if(son[x][0])dfs(son[x][0]);a[++cnt]=w[x];if(son[x][1])dfs(son[x][1]);
}
int find(int x)
{int l=1,r=tail;while(l<=r){int mid=(l+r)/2;if(x>=q[mid]) l=mid+1;else r=mid-1;}return l;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%d",&w[i]);}for(int i=2;i<=n;i++){int fa,ch;scanf("%d%d",&fa,&ch);son[fa][ch]=i;}dfs(1);for(int i=1;i<=n;i++)a[i]=a[i]-i;for(int i=1;i<=n;i++){if(a[i]>=q[tail])q[++tail]=a[i];else q[find(a[i])]=a[i];}printf("%d",n-tail);
}

P3365,jzoj3894-改造二叉树【LIS,BST】相关推荐

  1. [noip模拟]改造二叉树LIS

    1.改造二叉树 [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作"左孩子"和"右孩子&quo ...

  2. 改造二叉树 (长乐一中模拟赛day2T1)

    1.改造二叉树 [题目描述] 小Y在学树论时看到了有关二叉树的介绍:在计算机科学中,二叉树是每个结点最多有两个子结点的有序树.通常子结点被称作"左孩子"和"右孩子&quo ...

  3. [二叉树遍历|BST]leetcode 538 把二叉搜索树转换为累加树

    [二叉树遍历|BST]leetcode 538 把二叉搜索树转换为累加树 1.题目 题目链接 给定一个二叉搜索树(Binary Search Tree),把它转换成为累加树(Greater Tree) ...

  4. [转载]二叉树(BST,AVT,RBT)

    二叉查找树(Binary Search Tree)是满足如下性质的二叉树:①若它的左子树非空,则左子树上所有结点的值均小于根结点的值:②若它的右子树非空,则右子树上所有结点的值均大于根结点的值:③左. ...

  5. 二叉树(BST)之创建二叉搜索树

    二叉树搜索基本概念 二叉搜索树,以这样一种方式构成,在任何层.任何节点的直接左节点的存储值总是小于或等于其节点本身的值.所以节点的左子树总包含那些存储值小于或等于它的节点.同理,节点的右子树总包含那些 ...

  6. 查找二叉树(BST)

    1.查找二叉树的定义 先上图: 一棵二叉搜索树(Binary Sort Tree)是以一棵二叉树来组织的,可以用链表数据结构来表示,其中,每一个结点就是一个对象,一般地,包含数据值和指向孩子(也可能是 ...

  7. 二叉树(BST树)内结点的删除(3种情况全解)

    现在有一棵二叉树查找树如下: 如果我们需要删除一个结点,而且在删除之后,依然满足二叉查找树的数据排序策略.此时删除操作可分为一下三种情况.如下 情况1:结点没有左子树 如图:一棵没有左子树的二叉树 如 ...

  8. 欢乐纪中某B组赛【2019.1.25】

    前言 还算OKOKOK 成绩 RankRankRank是有算别人的 RankRankRank PersonPersonPerson ScoreScoreScore AAA BBB CCC 444 20 ...

  9. 排序二叉树BST(binary search/sort tree)

    之前介绍说,树这种存储结构,能提高数据的存储,读取效率.所以树的应用就可以体现在排序这一方面,比如有排序二叉树,平衡二叉树,红黑树等.本文介绍排序二叉树. 为啥有排序二叉树(二叉搜索树)的出现?这要从 ...

最新文章

  1. (转)利用快速开发框架,快速搭建微信浏览博客园首页文章
  2. nginx反向代理取得IP地址
  3. Java——容器(Comparable)
  4. hibernate的一对多双向关联映射----客户和订单关系
  5. 人脸识别大规模爆发!
  6. 邹伟博士出书啦!——《强化学习》从基础概念、核心原理到应用案例(文末赠书)...
  7. zen-coding for notepad++,前端最佳手写代码编辑器
  8. 7 款 Python 可视化工具对比
  9. 使用tar或dd等完成Linux系统备份恢复
  10. php查询过滤字段,php 字符过滤类,用于过滤各类用户输入的数据
  11. 2014 usnews 计算机科学 排名 天道留学,2014年USNews美国公立大学排名
  12. 网络隔离下的几种数据交换技术比较
  13. mysql 红黑树_微信大牛教你深入了解数据库索引
  14. 机器学习基础 维基翻译 保序回归 随机森林 Pipeline处理 及简单的sklearn例子
  15. 企业做好私域电商的六大关键点
  16. 应用GL823芯片自制的读卡器
  17. 计蒜之道初赛第一场-阿里的新游戏
  18. 互联网:消费互联网大势已去,产业互联网时代到来
  19. 安徽教育网计算机一级考试查询成绩,安徽计算机一级考试成绩查询
  20. 假期观影|《流浪地球》观后感

热门文章

  1. 中止是怎么用的_多士炉怎么用 使用多士炉注意事项
  2. 模拟器显示空白图片_Kawaks街机模拟器,还是小时候的味道!
  3. android消息响应实验报告,android实验一实验报告-20210401011015.docx-原创力文档
  4. mysql update返回_MySQL中,当update修改数据与原数据相同时会再次执行吗?
  5. realloc函_[转载]realloc函数的使用及注意事项(转)
  6. 一文了解贪心算法和回溯算法在前端中的应用
  7. mysql如何管理innodb元数据_MySQL 8 InnoDB 集群管理
  8. mysql多实例复制,Mysql实例使用Rotate Master实现MySQL 多主复制的实现方法
  9. PHP自动判断用户会员过期,php,_定时扣除用户过期积分,但平台用户量比较大,有没有好的解决方法?,php - phpStudy...
  10. python标准库time_Python 标准库之时间篇