A
考虑根被插入的时间,在根被插入之前的数都会放到同一个儿子,插入之后的数会交替往两边插入,形式一定形如
LLLLXRLRL 或
RRRRXLRLRL,这样我们就递归到了儿子的子问题。合并的时候分类讨论一下
szls 和
szrs 的大小关系,暴力合并的复杂度只有
O(min(szls,szrs)),时间复杂度
O(nlogn)。
D
每走一步就能得到走的方向和其他空地方向的优先级关系,暴力维护有没有出现环就做完了。
O(rc+∣s∣)。
E
题目相当于每次连
(a+n,b) 的双向边,询问有多少
(u,v) 满足有
x∈{u,u+n},y∈{v,v+n},
(x,y) 连通。
考虑并查集合并的时候启发式合并连通块的颜色数,然后我们先认为答案是每个连通块的
(2sz) 的和,这样只有一个点对在两个连通块同时出现的时候才会算重,考虑维护这样的点对个数。
合并两个连通块
S,T(
∣S∣≥∣T∣) 的时候,首先个数要减去
(2∣S∩T∣),然后对于
x∈T,x∈/S,如果
x 在第三个集合
U 中出现,个数要加上
∣S∪U∣。由于每个数只出现两次,可以离线下来把每个相同的数对放在平面上 DFS 序对应的点二维数点。时间复杂度
O(nlog2n+mlogn)。
F
按
p 从大到小贪心考虑,
p 的位置必定填的是一个所有猫的位置集合的交中的数,如果交中所有数都已经在更大的
p 中出现过或者不同的数已经超过
m−p+1 个那就不合法,否则显然存在方案。时间复杂度
O(n+m) 或
O(n+mlogm)。
H
考虑小凯的疑惑,设
gi=gcd(a1,…,ai),所有
kgn+i=2∑n[gi−1∤ai]gi−1ai 肯定能被表示出来,这个东西只有
O(V2)。如果
m 只有
O(V2) 这个级别就暴力,否则数位 DP 算所有
gn 的倍数。
O(V2+Vlogm)。
I
首先对于每个
i 做
n 次
(i,1) 尝试让
k 增加,这样可以使序列变成一个排列。
对于
i∈[1,n−1],我们尝试确定
a1−i 的位置。我们把
a2∼an 都
+i 之后
k 显然是
n−1,然后序列中没有
a1+i,对每个
j 询问
(j,i) 即可检查他的值是不是
a1−i。询问次数大约
3n2。
J
首先我们需要
k∈[2n−1,n2]。打表发现
k=n2−2。
考虑递归构造,如果
k≤4n−4 就把
n 放在最下面,否则放在最上面,这样在
n 足够大的时候
k∈[2n−1,n2]∖{n2−2},
n≤10 的时候暴力全排列。
O(n)。
K
我们需要
di,j+di+1,j+1−di+1,j−di,j+1=0。我们可以把这些等式随意加起来,这样就是“一个环,每个点都是直角,奇数位和等于偶数位和”的限制。对每个行列赋权使得
fi+di,j=gj,要求
maxfi≤mingj,连边 DFS 讨论一下即可。
O(n+m+k)。
L
往下走肯定是直着往下走,差分覆盖一下能躲太阳的
y。
O(n+V)。