https://codeforces.com/contest/1330/problem/E

有一个高度为h的大顶堆:有2-1个不同的正整数,下标从1到2h−1,1<i<2h, a[i]<a[⌊i/2⌋].

现在我们要降低堆的高度,为h,有2g-1个整数,那么我们要删掉2h-2g个数;

选择索引 i 删除,删除方法如下:

被删除的节点值为0,代表该节点不存在。

所以操作后,2g-1个元素的下标在[1,2g-1]范围内;使得剩余元素的总和最小,并且输出调用删除函数时删除的节点下标。

人话:将高度为h的完全大顶堆删除一部分节点变成高度位g的完全大顶堆,使得剩余部分和最小。

哈,此题不会,题意也很模糊,官方题解太长了,还是英文,要死了,直接看的博客,发现一个简单明了的;

参考博客:https://blog.csdn.net/qq_45458915/article/details/105309861?%3E

**思路**:删完后仍是完全大顶堆,那么首先保证叶子节点的高度为g,然后尽量删除值最大的节点,删到不能删为止,再删除下一个值较大的节点,也就是贪心的从根节点开始删除,只要满足要删除的节点删除后叶子节点的高度大于等于g就可以了,总之能删就删,不能删就删下一个节点。

#include <bits/stdc++.h>
using namespace std;
;
;
typedef long long ll;
//typedef __int128 LL;
const int inf=0x3f3f3f3f;
const long long INF=0x3f3f3f3f3f3f3f3f;
<<(+))+];
vector<int>ans;
int getid(int k)
{
    ]==&&a[(k<<)+]==)return k;
    ]>a[(k<<)+]));
    )+);
}
void dfs(int k)
{
    ]==&&a[(k<<)+]==)
    {
        a[k]=;
        return ;
    }
    ]>a[(k<<)+])a[k]=a[k<<],dfs(k<<);
    )+],dfs((k<<)+);
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int h,g;
        scanf("%d%d",&h,&g);
        ;i<=<<(h+);i++)a[i]=;
        ans.clear();
        ;i<=(<<h)-;i++)scanf("%d",&a[i]);
        <<g)-;
        ;i<=(<<g)-;i++)
        {
            while(getid(i)>limit)
            {
                ans.push_back(i);
                dfs(i);
            }
        }
        ll sum=;
        ;i<=(<<g)-;i++)sum+=a[i];
        printf("%lld\n",sum);
        ;i<ans.size();i++)printf(?'\n':' ');
    }
    ;
}

Codeforces 631 (Div. 2) E. Drazil Likes Heap 贪心的更多相关文章

  1. Codeforces Round #631 div1C(或者div2E) Drazil Likes Heap 题解

    题目链接:https://codeforces.com/contest/1329/problem/C 或者:https://codeforces.com/contest/1330/problem/E ...

  2. Codeforces 631 (Div. 2) D. Dreamoon Likes Sequences 位运算^ 组合数 递推

    https://codeforces.com/contest/1330/problem/D 给出d,m, 找到一个a数组,满足以下要求: a数组的长度为n,n≥1; 1≤a1<a2<⋯&l ...

  3. Codeforces 631 (Div. 2) C. Dreamoon Likes Coloring 思维or构造

    https://codeforces.com/contest/1330/problem/C 给n个格子染色,有m种颜色,要求最后的所以格子被染色,并且有m种颜色. 染色要求:每种颜色有一个值li,选择 ...

  4. CF R631 div2 1330 E Drazil Likes Heap

    LINK:Drazil Likes Heap 那天打CF的时候 开场A读不懂题 B码了30min才过(当时我怀疑B我写的过于繁琐了. C比B简单多了 随便yy了一个构造发现是对的.D也超级简单 dp了 ...

  5. Codeforces Round #631 (Div. 2) D. Dreamoon Likes Sequences (bitmasks +dp )

    https://codeforces.com/contest/1330/problem/D 题目大意:给出一个限制 d 与模数 m ,求出可以构造出的满足条件的数组 a 的个数,需要满足以下条件:   ...

  6. Codeforces Round #631 (Div. 2) D.Dreamoon Likes Sequences

    题目连接:Dreamoon Likes Sequences  题意:给你d和m,让你构造一个递增数组a,使数组b(i==1,b[i]=a[i] ; i>1, b[i]=b[i-1]^a[i])递 ...

  7. Codeforces 1329C - Drazil Likes Heap(堆+贪心)

    题目链接 题意 给出一个高度为 h 的大根堆, 要求弹出其中若干个数后高度变为 g, 并且前后大根堆都是满二叉树. 问新的大根堆所有数之和的最小值, 并要给出一种弹出数的操作序列(节点序号). h, ...

  8. Codeforces Round #631 (Div. 1) B. Dreamoon Likes Sequences 题解(思维+求贡献)

    题目链接 题目大意 让你构造一个严格单调上升的数组a满足\(1<=a_1<a_2<....a_n<=d\) 而且要使得这个数组的异或前缀和也满足严格单调上升,求有多少个满足条件 ...

  9. Codeforces #366 (Div. 2) D. Ant Man (贪心)

    https://blog.csdn.net/liangzhaoyang1/article/details/52215276  原博客 原来好像是个dp题,不过我看了别人的博客使用贪心做的 复杂度(n^ ...

随机推荐

  1. 三个值得期待的JavaScript新功能!

    让我们来看看JavaScript中一些有用的即将推出的功能.您将看到他们的语法,链接以及时了解他们的进度,我们将编写一个小型测试套件,以展示如何立即开始使用这些提案! JavaScript是如何更新迭 ...

  2. 初窥Mybatis初始化

    引言 这篇文章呢,主要是讲Mybtais的两种方式的源码剖析:传统方式以及Mapper代理方式,初次探索Mybatis源码,希望大佬勿喷并且指正错误,谢谢! 个人博客:www.fqcoder.cn 一 ...

  3. CentOS下安装Anaconda和pycharm

    前情提要:Linux越来越受大家喜爱,而在Linux中有一个社区很活跃的系统:那就是CentOS:而Anaconda又是几乎就一劳永逸的,你装了它之后基本上很多类库就不用再装了.然后就是pycharm ...

  4. sass片段

    变量: $color: #333; body { color: $color;} -----> body { color: #333; } 嵌套: nav { ul { margin: 0; } ...

  5. kafka集群搭建及结合springboot使用

    1.场景描述 因kafka以前用的不多,只往topic中写入和读取过数据,这次刚好又要用到,记录下kafka集群搭建及结合springboot使用. 2. 解决方案 2.1 简单介绍 (一)关于kaf ...

  6. LeetCode-最长回文串

    题目描述: 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串. 在构造过程中,请注意区分大小写.比如 "Aa" 不能当做一个回文字符串. 注意:假设字符 ...

  7. JavaScript表单序列化的方法详解

    本文介绍下,在javascript中实现表单序列化的方法,通过实例加深理解,有需要的朋友参考下吧. 在JavaScript中,可以利用表单字段的type属性,连同name和value属性一起实现对表单 ...

  8. javascript中indexOf()和lastIndexOf()详解

    ECMAScript5为数组实例添加两方法:indexOf()和lastIndexOf().这两个方法接受两个参数:要查找的项和(可选的)表示查找起点位置的索引.其中,indexOf()方法从数组的开 ...

  9. JavaScript 原型与继承

    JavaScript 原型与继承 JavaScript 中函数原型是实现继承的基础.prototype.construct.原型链以及基于原型链的继承是面向对象的重要内容 prototype 原型即 ...

  10. Http报文和Request和Response的常用方法

    简述 它是HTTP应用程序之间发送的数据块.这些数据块以一些文本形式的元信息开头,这些信息描述了报文的内容及含义,后面跟着可选的数据部分.这些报文都是在客户端.服务器和代理之间流动. HTTP报文的流 ...