改造二叉树(lis+中序遍历)
来源:互联网 发布:北京赛车pk10平台源码 编辑:程序博客网 时间:2024/05/16 02:53
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=1e5+10;
int n,cnt,num[maxn],len,a[maxn],fa[maxn],l[maxn],r[maxn],dp[maxn];
void dfs(int x){
if(x==0) return ;
dfs(l[x]);
num[++cnt]=a[x];
dfs(r[x]);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int x,y;
for(int i=2;i<=n;i++){
scanf("%d%d",&x,&y); fa[i]=x;
if(y==0) l[x]=i;
else r[x]=i;
}
dfs(1);
for(int i=1;i<=cnt;i++) num[i]-=i;
for(int i=1;i<=cnt;i++){
if(num[i]>dp[len]) dp[++len]=num[i];
else dp[lower_bound(dp+1,dp+1+len,num[i])-dp]=num[i];
}
cout<<n-len<<endl;
return 0;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=1e5+10;
int n,cnt,num[maxn],len,a[maxn],fa[maxn],l[maxn],r[maxn],dp[maxn];
void dfs(int x){
if(x==0) return ;
dfs(l[x]);
num[++cnt]=a[x];
dfs(r[x]);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
int x,y;
for(int i=2;i<=n;i++){
scanf("%d%d",&x,&y); fa[i]=x;
if(y==0) l[x]=i;
else r[x]=i;
}
dfs(1);
for(int i=1;i<=cnt;i++) num[i]-=i;
for(int i=1;i<=cnt;i++){
if(num[i]>dp[len]) dp[++len]=num[i];
else dp[lower_bound(dp+1,dp+1+len,num[i])-dp]=num[i];
}
cout<<n-len<<endl;
return 0;
}
阅读全文
0 0
- 洛谷 3365 改造二叉树(中序遍历+LIS)
- 改造二叉树(lis+中序遍历)
- 改造二叉树_纪中3894_dfs+LIS
- 【noip模拟 改造二叉树】 中序遍历+二分+最长不下降子序列
- 二叉树层次遍历的应用--改造二叉链表
- 二叉树的遍历(2):中序遍历
- 【二叉树】中序遍历二叉树
- 中序遍历二叉树
- 中序遍历二叉树
- 中序遍历二叉树
- 二叉树 - 中序遍历
- 中序遍历二叉树
- 中序遍历二叉树
- 二叉树-中序遍历
- 中序遍历二叉树
- 二叉树遍历(Java)---前序遍历,中序遍历,后序遍历
- 二叉树的遍历(1)--先序遍历,中序遍历,后序遍历
- 二叉树的遍历(前序遍历、中序遍历、后序遍历)
- 10月25日 c语言 输入星星图形5 倒立的等腰三角形
- [从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)
- Nutch2.2.1的配置(使用MySQL作为数据存储)
- 【java】IO详解之BIO
- 核函数在机器学习上的
- 改造二叉树(lis+中序遍历)
- Python与机器学习之常用的Numpy操作
- struts2 拦截器
- javascript高级系列之slice()与substring()
- Hibernate Mapping 加载慢,时常连接超时问题
- angular用户列表信息
- 网康上网行为管理NI3200-60
- iOS开发中 ----更换头像图片--代码块
- 特殊回文数