随笔分类 - 数据结构--优先队列
摘要:$n \leq 100000$个数字,放进$k$叉树里,一个点只能放一个数,使所有数字乘以各自深度这个值之和最小的同时,最大深度的数字最小。 哈夫曼。这是我刚学OI那段时间看到的,感觉就是个很无聊的贪心,而且密码学我也不学深对哈夫曼的应用也了解不多,没想到出现在noi。 原来的哈夫曼只需要每次拿k个
阅读全文
摘要:$n \leq 50000$的序列,问选不超过$m \leq 50000$个区间使得和最大。 如果正数区间总数比$m$小那肯定全选。否则有两种方式减少区间数量:丢掉一个正区间;补一个负区间连接两个正区间。贪心即可。 先把左右端的负数去掉,然后把正区间和负区间处理出来。优先队列维护区间值,然后开个链表
阅读全文
摘要:$n \leq 5e5,m \leq 3e6$的DAG,问删掉某个点的最长路最短是多少,并输出这个点。 采用“整体去部分”的思想。先建一源一汇,源连所有点,所有点连汇。$f_i$--从$s$到$i$的最短路;$h_i$--从$i$到$t$的最短路,这俩数组拓扑一下可以算出。一条边对答案有$f_u+1
阅读全文
摘要:$n \leq 5e5$的正负数数列,求长度在$[L,R]$的区间和前$K \leq 5e5$大的区间和的和。 先把区间和变为两个前缀和相减。定一移二,确定区间右端点,然后左端点就是一个范围。用个堆把每个右端点能取得的区间和最大的那个丢进去,咋知道哪个最大?右端点前缀和一定,找左端点在一定范围内的最
阅读全文
摘要:n<=100000种食物,给每个食物煮熟时间,有q<=500000个操作:在某时刻插入某个食物;查询熟食中编号最小的并删除之;查询是否有编号为id的食物,如果有查询是否有编号为id的熟食,如果有熟食删除之,否则输出其离煮熟的最小时间;查询编号在[L,R]的熟食有多少。保证操作时间递增。 可以发现:针
阅读全文
摘要:n<=50000组数Ai,Bi,Ai>=Bi,最多K<=n个组选Bi,其他组选Ai,求最多能选中几组数使选数总和不超过M<=1e14。 一开始,肯定是在Bi里面选K个最小的,然后M有剩的再来调整。如何调整呢?现在我有两个选择:在没选的数里面选个最小的Aj,否则在选的K个最小Bi的里面,把某个Bi换成
阅读全文
摘要:n<=100000的树,砍S<n条边,求砍完后S+1棵树的最大直径的最小值。 树的直径要小小哒,那考虑一棵子树的情况吧!一棵子树的直径,就是子树根节点各儿子的最大深度+次大深度。就下面这样: 最大值最小肯定二分答案啦,那这棵子树如果有毛病呢,砍谁呢?肯定砍最大深度啦!所以就子树最大深度+次大深度有毛
阅读全文
摘要:n<=100000个房容量Ai,m<=100000头牛分别要占Li~Ri的房,求能同时满足的牛最多有多少。 先把这些各种各样要求的牛排个序观察一下,可以发现,如果若干头牛的Li是一样的,而Li处的容量不允许它们同时放,这时就要舍弃Ri大的那几头,因为价值相同,舍弃谁都不会影响当前的答案,但Ri大的对
阅读全文
摘要:对叠放着的n张牌,第i张牌写有数字Ai,进行操作:将牌堆顶的牌取出,若是当前牌堆最小值就扔掉,否则放到牌堆底,求牌堆空时操作次数。 怎么看怎么像约瑟夫。。不过约瑟夫DP我不太熟,于是就yy了一下 “当前最小值”??优先队列。把Ai和i绑起来扔到优先队列里,就可以知道下一步要跳到哪里。 有个问题:如果
阅读全文

浙公网安备 33010602011771号