2017 UESTC Training for Data Structures
http://acm.uestc.edu.cn/#/contest/show/155
对大二来说貌似这套题有点简单了,多是一眼题
发现漏了一题,然而是以前看别人讨论过的:)。
H:线段树+暴力。大概就是如果公差大一点的话,直接暴力扫一次,小的公差就用多个线段树维护起来。
另外线段树还有一道好题,uoj228.
A:线段树水题,最大最小值
B:求连续1的时候考虑分治算法,线段树,记录区间前缀最长0/1和后缀最长0/1和整体最长0/1和一个lazy。
C:线段树经典操作。。注意作乘法的时候,要把addtag也更新,pushdown的时候儿子的addtag要先乘上父亲的mul[0]再加父亲的add,sum处理的时候也类似。
D:先按一维排序,然后下面用树状数组或者线段树维护一下
E:贪心+树状数组
F:01字典树
G:和B有点像吧,也考虑分治算法,线段树记录前缀最大和,后缀最大和
I:贪心+set+并查集吧,对于每个节点都能有两个儿子,每次用set二分找一个恰好小于等于这个值的,然后接在它的后面,如果被接了两次就从set中删掉,并查集维护一下哪几个点在一起。
J:哈夫曼树,用优先队列一直维护就好了
K:顺着来比较难搞,那我们倒着来,并用个前缀和再加并查集什么的维护一下
L:带权并查集
M:二分最小值,贪心用set来维护
N:染色题,并查集和dfs都能搞掉吧
O:分别维护两种操作,第一种dfs序维护,第二种当然是树链剖分。
P:线段树扫描线维护面积并
Q:就是0/1异或啊,二维树状数组搞一下