2019-9-9做题记录

Posted shxnb666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019-9-9做题记录相关的知识,希望对你有一定的参考价值。

1、罗马游戏:

左偏树模板。

小根堆:合并选小的做根,记为$r1$,然后把$r2$合并到$r1$右边(原$r1$左边长,右边短),然后更新父亲,判断长度关系交换儿子,更新长度。

删除用$fhq_treap$的删除方式。

查找用并查集的方法,但是不带路径压缩。

2、棘手的操作:

联通块内最小值用左偏树维护,全局最小值用$multiset$维护。

3、城池攻占:

把所有的骑士一块处理,因为每一个骑士只会加入军团一次、死掉一次,所以如果我们只维护这些事件,复杂度是正确的,很容易想到左偏树。

注意到无论加一个数、还是乘一个正数,左偏树内(维护的集合)内的相对大小不变。所以我们可以通过打懒标记(类似$fhq_treap$)的方式维护加、乘。

到一个点时直接把小于防御值的骑士弹出左偏树宣告死亡,然后把还在左偏树里的元素打上修改懒标记即可,

维护懒标记要像$fhq_treap$那样$merge$,$pop$时$pushdown$。

4、【APIO2012】派遣:

选定管理者之后,选的点一定是这个子树里面,尽可能多。所以选小的,合并直接把超过预算的大的部分弹出左偏树即可。

5、Roads in Yusland

$aysn$给我推荐的神仙题,$yyb$也写了。结果想了很长时间都没有做出来。晤,果然我还是太弱了。

是一个带反悔的贪心操作。

从下至上考虑,对于每个点的父边,把不能到达这条边的链弹去,此时,堆中的元素都是可以覆盖到这条边的,我们找到一个权值最小的从下面上来的覆盖这条边的链,然后把它算到答案中去,并且把它自己和堆中存的链全都减去它的权值,意思是:万一有一天,发现一个比它更优的链,不仅可以完成把这条边覆盖,还可以把更上面的边覆盖,就把现在选的这条边去掉,选更优秀的。

要是知道了过程,正确性应该不难理解吧。

6、Dynamic Ranking

去年就会做的题,今天重写一下,就当复习了。

对于不带修改的情况:

如果序列长度为$n$,那我们需要$n$棵线段树,它们是对于值域建的,第$i$棵主席树代表数$a_1,a_2,...,a_i$形成的集合,在序列上,后一个等于在前一个的基础上挂一条链,这样查找的时候,我们只要关心第$r$棵和第$l-1$棵,在值域上二分,最后确定下点,这个过程中,两个数的指针是一起同向动的。

扩展到带修改的情况:

我们还是需要$n$棵线段树,但是第$i$棵主席树代表$a[i],a[i-lowbit(i)]...$形成的集合,建主席树的时候,就不存在一个是另一个的基础关系了,所以要把$a_i$插入到$i,i+lowbit(i)...$中,查找的时候,要确定组成前缀和最多的$log[l-1]+log[r]$个主席树的位置,直接在上面检查二分的值域是否合法,这些指针也是一起同向动的。

7、【BZOJ2588】Count On a Tree

在树链上找$k$大,我不知道怎么处理(以为要树链剖分),但是看了题解,才发现我是会的,这状态。。。发现和江苏的一道字符串题的套路是一样的。

$x$在$fa[x]$的基础上加上$x$的权值,找的时候确定四棵线段树,分别是$u,v,LCA(u,v),fa[LCA(u,v)]$,然后通过这些检验就可以了。

8、【BZOJ3123】森林

第7题的操作下带一个合并操作,那么直接启发式合并就行了。但是这是一个无根树,怎么启发式合并呢?

选一个维护联通块的$size$,然后让小联通块的接点的父亲是大联通块,这样每次只需要对小联通块内的每个点重建一条链即可。

9、【BZOJ3932】任务查询系统

一眼主席树,用扫描线的方法,每次只关心变化,处理询问直接在第$x$棵线段树上二分即可。

10、【BZOJ3295】动态逆序对

曾经被我用分块卡过去了,复杂度根号$log$里套根号,现在想想块的大小还可以更优。。。。

然后$aysn$写神仙主席树,把我$D$了,呜呜呜。

现在看看好像很水,带修改主席树,正难则反(正好像不是很难,但我习惯这种思维了),每次加入一个数,查前面有多少数比他大,后面有多少个数比他小,复杂度是两个$log$的。

11、【BZOJ4571】美味

 按位考虑,把每次把查找的范围缩小在一个区间里。

以上是关于2019-9-9做题记录的主要内容,如果未能解决你的问题,请参考以下文章

*做题记录表

*做题记录表

buu学习记录(下)(做题是不可能做题的)

省选集训做题记录

project euler做题记录

清华集训2014 做题记录