T1
一直以为比较简单,所以在赛时思考了很久。异或肯定是tire树,但是按位或和按位与不好直接用,时间复杂度是假的(真实情况下暴力也能过)。然后看都了值域范围数值只能取到 \(2^{16}\) 所以觉得做法一定与值域有关,不让肯定会开到 \(1e9\) 。然后就想到是否可以对每种值开个数组存下答案,但是也时间爆炸了。后面就写别的题去了。
正解其实不远,考虑可以通过折半来优化自己的时间复杂度,考虑刚才的做法在插入是 \(2^{16}\) 的复杂度,但查询是 \(O(1)\),所以,应该均摊时间。考虑插入时只存前8位的答案。在查询时只暴力枚举后八位,总复杂度就变成乘 \(2^8\)。
T2
开题的第一遍,没有直接想到做法但觉得这道题应该比较简单,所以在思考t1无果之后就开始想t2,发现在排序后插入,就变成了链覆盖的问题,直接做即可。也可以在线用合并。写题的速度有点慢,还被字符串排序卡了一些,平时的积累不太够。
T3
最板的一道题。在第一眼发现是维护直线的同时求单点的最值,就知道了是李超树。没什么底气写,感觉自己可能不太清楚实现了。就最后来写它还先写了暴力。最后可能就剩20分钟的样子,在写完了基本实现之后被插入的时候的分讨卡住了,最后也没写过。下午先复习了一下,发现自己上一次没有深入理解它的标记永久化以及分讨。下午改了出来,还学了一下它的拓展广义李超树,比较有启发性,感觉是决策单调性的dp的可能的一种通解。
考试总结
这次没有挂分,是自己打了的都得到了分。比起上一次挂大分的树链剖分这一次也没什么失误的写了出来。但是还是对于一些比较常用的算法不熟。
计划学数学的同时将线段树的博客总结完。感觉它非常的重要。
数据结构总结
这几周主要就是深入学了考察较多同时性价比比较高的算法,大概一周多的分块,半周的扫描线(历史和还不会)然后半周的平衡树,以及剩下的时间用在可持久化,cdq分治,点分治,树链剖分。对于单侧递归,KDT以及树套树是没怎么花时间的。可能会在后面穿插着尝试一下。
对于以前没怎么掌握的以点分治为代表现在的实现能力已经提高了,但是对于遇到数据结构的题的总体思路还没不清晰,可能需要后面在来梳理总结。
数据结构的两场考试感觉更多在考察一些树形的数据结构上,没有考察到分块,cdq分治等,可能还不太确定自己在这方面的进步。但是明显对树形的掌握还是不够,模板都写不出来,速度和正确性都不站优。
然后对于学过的算法以及做过的题,还有一些blogs没有完工,这些可能每天晚上抽一点时间来写,然后补充到直接的数据结构的总框架的blog里。