注意到k与n同阶,考虑构造一种枚举子集的方式,使得尽量先枚举较小的子集.首先sort一下,用堆维护待选子集.每次取出最小子集,并加入:1.将子集中最大数ai替换为ai+1 2.直接向子集中添加ai+1 这两个子集(若不存在ai+1则不操作).如此操作k次即可得到第一问的答案. 对于正确性,我们证明当删除一个子集后恰好比他大的下一个子集一定在堆中.采取归纳和反证.显然每个子集都可以由上面的构造方式变换得来.归纳基础显然.假设该子集和比它小的所有子集已被枚举,如果恰好比它大的这个子集不在堆里,则说明…
题目链接:http://www.bnuoj.com/bnuoj/problem_show.php?pid=26475 题意:每次输入一个操作,如果是数字,那么放入一个容器中,如果是#号,取出当前容器中的中间值.. 数据结构基础题,显然维护两个堆就可以了,两个堆的size大小不超过1... 其实各种数据结构都可以搞,比如线段树,先离线然后离散,然后线段树记录size,二分查找.. //STATUS:C++_AC_856MS_3192KB #include <functional> #includ…
[BZOJ4919][Lydsy六月月赛]大根堆 Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i>v_j. 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树. Input 第一行包含一个正整数n(1<=n<=200000),表示节点的个数. 接下来n行,每行两个整数v…
Young Maids Time Limit: 50 Sec  Memory Limit: 512 MB Description 给定一个排列,每次选出相邻的两个放在队头,要求字典序最小. Input 第一行一个整数n,第二行n个数表示这个排列. Output n个数表示答案. Sample Input 8 4 6 3 2 8 5 7 1 Sample Output 3 1 2 7 4 6 8 5 HINT n%2=0,2 <= n <= 2e5 Solution 倒着考虑. 我们维护一个小根…
[BZOJ4388]JOI2012 invitation Description 澳洲猴举办了一场宴会,他想要邀请A个男生和B个女生参加,这A个男生从1到A编号,女生也从1到B编号.现在澳洲猴知道n组朋友关系,这n组朋友关系是这样描述的:男生中编号为Pi到Qi的和女生中编号为Si到Ei的是好朋友,这也就是说(Qi-Pi+1)个男生之间互相是好朋♂友,(Si-Ei+1)个女生之间互相是好朋♂友,(Qi-Pi+1)个男生和(Si-Ei+1)个女生之间互相也是好朋友,总之他们互相是好友关系,并且互相的…
是不是每做道线段树进阶都要写个题解..根本不会写 Description 给定一棵n个节点的有根树,编号依次为1到n,其中1号点为根节点.每个点有一个权值v_i. 你需要将这棵树转化成一个大根堆.确切地说,你需要选择尽可能多的节点,满足大根堆的性质:对于任意两个点i,j,如果i在树上是j的祖先,那么v_i>v_j. 请计算可选的最多的点数,注意这些点不必形成这棵树的一个连通子树. Solution 看起来很像一道DP,实际上也确实要用到DP的思想. 设编号为i的点的子树中最大权值为j的最优方案为…
题目链接 考虑树退化为链的情况,就是求一个最长(严格)上升子序列. 对于树,不同子树间是互不影响的.仿照序列上的LIS,对每个点x维护一个状态集合,即合并其子节点后的集合,然后用val[x]替换掉第一个大于它的数(有等于的就不换了). 最后根节点状态集合的大小就是答案了. 关于替换数,可以先找到这个数的位置,如果有这个数就不用管了:没有的话插入进去,然后递归回去,找到一个靠右的位置删掉. 当然其实不用线段树合并这么麻烦,直接上multiset启发式合并就可以了.. 注意是合并了子树的状态,so叶…
题意:有一个长为n的序列,对其进行q次操作,第i次操作可以把连续的一段覆盖为i 现在给出操作后的序列,第i个数字为a[i],其中有一些为0的位置可以为任意值,要求构造任意一组合法的操作后的序列 无解输出NO n,q<=2e5,0<=a[i]<=q 思路:看不懂别人写的题解,照自己的思路写一个…… 首先将a[i]从大到小排序,若a[i]已经确定则将a[i]填到i左右两端连续的0中 然后判断q有没有在填完之后的序列中出现,若没有出现则找一段连续的0覆盖成q,找不到0则无解 前面两步能将数列填…
题目链接 Description ACM has bought a new crane (crane -- jeřáb) . The crane consists of n segments of various lengths, connected by flexible joints. The end of the i-th segment is joined to the beginning of the i + 1-th one, for 1 ≤ i < n. The beginning…
声明 本文为 Clouder 原创,在未经许可情况下请不要随意转载.原文链接 前言 一般地,这篇文章是给学习过线段树却仍不透彻者撰写的,因此在某些简单的操作上可能会一笔带过. 当然了,入门线段树后也可以读此文来尝试进阶.巩固理解,而线段树大师就没有读本文的必要了,无任何高端操作. 笔者亦在写作过程中,重新理解线段树这个神奇的数据结构. 行文并无严格顺序. 概念 线段树是一种广泛用于区间操作的二叉搜索树,易于理解,灵活性高. 相比于暴力的\(O(n)\)复杂度,它的复杂度为\(O(\log n)\…