4909 寂寞的堆

时间限制: 1 s

空间限制: 8000 KB

题目等级 : 大师 Master

题目描述 Description

堆,是一种神奇的数据结构 不寂寞的堆,是一棵满二叉树,其儿子节点的key值都不大于父亲节点的key值 久而久之,不寂寞的堆寂寞了,它不满足于自己这无聊又乏味的性质,于是它提出要求,在自己本身性质的基础上,对于堆中任意一个非叶子节点,它的左子树中任意节点的key值都不能大于其右子树任意节点的key值 我们称满足上述两个条件的满二叉树为寂寞的堆 给定你一棵满二叉树,询问最少修改多少个节点的key值,才能使它变成寂寞的堆

输入描述 Input Description

第一行是层数 表示完全二叉树共n层

之后每一行表示该i层所有叶子节点的值

可能有数据稍大 推荐开long long

输出描述 Output Description

最小的k值

样例输入 Sample Input

2

2

1 2

样例输出 Sample Output

0

数据范围及提示 Data Size & Hint

dp

n<=18

对于30%的数据 n<=2

对于60%的数据 n<=10

/*
由树用后序遍历搞成序列.
然后求LIS(nlogn).
*/
#include<cstdio>
#include<algorithm>
#include<cmath>
#define MAXN 200001
#define LL long long
using namespace std;
struct data{LL lc,rc;}tree[MAXN*4];
LL n,s[MAXN],a[MAXN],tot,ans,cut,len,c[MAXN];
LL read()
{
LL x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
return x*f;
}
void slove(LL x)
{
if(tree[x].lc) slove(tree[x].lc);
if(tree[x].rc) slove(tree[x].rc);
s[++tot]=a[x];
}
void erfenlis()
{
for(LL i=1;i<=tot;i++)
if(s[i]>=c[len]) c[++len]=s[i];
else{
LL p=upper_bound(c+1,c+len+1,s[i])-c;
c[p]=s[i];
}
}
int main()
{
LL x,z;
n=read();
for(LL i=1;i<=n;i++)
{
for(LL j=1;j<=pow(2,i-1);j++)
{
cut++;a[cut]=read();
if(j%2==1) tree[cut/2].lc=cut;
else tree[cut/2].rc=cut;
}
}
slove(1);
erfenlis();
printf("%lld",cut-len);
return 0;
}

Codevs 4909 寂寞的堆的更多相关文章

  1. codevs 4909 寂寞的堆(写的好丑0.0)

    #include<iostream> #include<cstdio> #include<cstring> #include<cmath> #defin ...

  2. codevs 3110 二叉堆练习3

    3110 二叉堆练习3 http://codevs.cn/problem/3110/ 题目描述 Description 给定N(N≤500,000)和N个整数(较有序),将其排序后输出. 输入描述 I ...

  3. codevs 必做:堆:1245、2879 并查集:1069、1074、1073

    1245 最小的N个和  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 有两个长度为 N ...

  4. codevs 2977 二叉堆练习1x

    时间限制: 10 s 空间限制: 32000 KB 题目等级 : 白银 Silver       题目描述 Description 已知一个二叉树,判断它是否为二叉堆(小根堆) 输入描述 Input ...

  5. codevs 2879 堆的判断

    codevs 2879 堆的判断 http://codevs.cn/problem/2879/ 题目描述 Description 堆是一种常用的数据结构.二叉堆是一个特殊的二叉树,他的父亲节点比两个儿 ...

  6. Codevs堆练习

    Codevs堆练习 黄金:2830.2879.2995.3110 钻石:1052.1063.1245.1246.2057.2573.3377 大师:1021.1765.2069.2913.3032

  7. CODEVS 1245 最小的N个和 堆+排序

    原题链接 http://codevs.cn/problem/1245/ 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 N^2 个和,求 ...

  8. AC日记——二叉堆练习3 codevs 3110

    3110 二叉堆练习3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 给定N(N≤500,000)和N个整 ...

  9. 扫描线+堆 codevs 2995 楼房

    2995 楼房  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 地平线(x轴)上有n个矩(lou)形(fan ...

随机推荐

  1. 深入理解C++11 C3

    继承构造函数 class A { public: A(int i):m_i(i) {} A(double d, int i):m_d(d),m_i(i){} private: int m_i{0}; ...

  2. C++ STL Vector学习 (待续)

    头文件:<vector> 初始化 vector<Elementtype> vec(); /*Elementtype是数据类型,10代表长单为10*/ vector<Ele ...

  3. k8s-搭建 EFK 日志系统

    搭建 EFK 日志系统 大家介绍了 Kubernetes 集群中的几种日志收集方案,Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch.Fluentd 和 Kibana( ...

  4. Scala学习十五——注解

    一.本章要点 可以为类.方法.字段.局部变量.参数.表达式.类型参数以及各种类型定义添加注解 对于表达式和类型,注解跟在被注解的条目之后 注解的形式有@Annotation.@Annotation(v ...

  5. C语言两个特别大的整数类型相加超出范围使用两个技巧

    技巧1:用long (%ld)或者long long(%lld)类型存取 技巧2:当两个同号的数字相加,放到等号的另一边,变成减号 问题: 给定区间[-2的31次方, 2的31次方]内的3个整数A.B ...

  6. ztree入门

    ztree入门 ztree可用于权限管理,机构部门等有层次的数据 准备工作 ztree官网 点击右上角的GitHub或者码云的地址将demo下载到本地 在本地新建一个项目,将下载的文件中zTreeSt ...

  7. PCA(主成分分析)方法浅析

    PCA(主成分分析)方法浅析 降维.数据压缩 找到数据中最重要的方向:方差最大的方向,也就是样本间差距最显著的方向 在与第一个正交的超平面上找最合适的第二个方向 PCA算法流程 上图第一步描述不正确, ...

  8. 微信小程序登录获取手机号

    一,发送请求携带 code 到后台换取 openid var that = this; wx.login({ success(res) { console.log(res); var code = r ...

  9. MUI 支付案例(支付宝/微信)

    首先说明一下,本文借鉴了多位博主的文章,所以会看到很多一样的代码. 写这篇博客主要目的是为了便于后期查看(不好之处,敬请留言吐槽),案例经本人测试,是可以使用的. 先上效果图 前端HTML代码: &l ...

  10. AOP底层实现原理,动态代理如何动态

    代理 指定另外一个主体代替原来的某个主体去执行某个事物 代理执行的人 需要代理的人 需要代理的事情是一定要做的 但是被代理的人没有时间或自己做的不专业 静态代理: 父母朋友帮忙物色找对象 代理人掌握需 ...