A
从大到小贪心加入,用并查集合并
B
一个经典的维护折现联通块的套路
我们按权值从小到大加入放到排列中某一个位置,若旁边有值就把贡献算上
我们维护
d
p
i
,
j
,
t
dp_{i,j,t}
dpi,j,t 表示
j
j
j 个连通块,两边有
t
t
t 个
注意考虑整体的增量,当前一步会整体拔高
(
2
j
−
t
)
∗
(
a
i
−
a
i
−
1
)
(2j-t)*(a_i-a_{i-1})
(2j−t)∗(ai−ai−1)
我们维护前二十个二元组
(
a
,
b
)
(a,b)
(a,b) 表示最大值以及最大值次数就可以
D
p
Dp
Dp 了
C
利用这个结论:每个元素都是一个 [ 0 , 1 ] [0,1] [0,1] 的随机数,一个大小为 k k k 的中最小值的期望是 1 k + 1 \frac{1}{k+1} k+11,我们给每个颜色分配一个权值,那么就是求链的最小值,多分配几个正确概率就很高了
D
从
(
1
,
1
)
,
(
n
,
n
)
(1,1),(n,n)
(1,1),(n,n) 做两边
D
P
DP
DP,用主席树维护字典序比大小
考虑
b
a
n
ban
ban 掉一个矩阵会有一些格子是必经点,分别是一个前缀和后缀,求一个前缀 / 后缀
m
i
n
min
min 就可以了
E
把对称轴周围的 n n n 个点拿出来跑费用流
F
大力 H a s h Hash Hash
G
二分答案后,邻 d p i , j dp_{i,j} dpi,j 表示 i i i 的子树,选 j j j 条边且满足条件的情况下的最短链
H
线段树分治,注意到若 x > x i > x j x>x_i>x_j x>xi>xj 而 j j j 不必 i i i 优,那么之后一定不比 i i i 优,对这个单调性进行再分治就可以了
I
注意到面积最大是 ( ∣ S ∣ 4 ) 2 (\frac{|S|}{4})^2 (4∣S∣)2,所以暴力把围出来的格子 b f s bfs bfs 一遍很正确
J
暴力 d f s dfs dfs 找哪一个复杂度很对
K
当前最优集合一定是上一步最优集合加入一个得来的
并且若知道集合的样子,肯定是按出锅时间从小到大吃
我们按出锅时间从小到大维护当前的最优集合,考虑将
i
i
i 插入一定会插入到
m
a
x
(
t
p
,
a
i
)
+
b
i
<
t
p
+
1
max(t_p,a_i)+b_i<t_{p+1}
max(tp,ai)+bi<tp+1 的最前方,可以在平衡树上二分得到,接着需要将后面的修改为
m
a
x
(
t
,
a
)
+
b
max(t,a)+b
max(t,a)+b,是一段
c
o
v
e
r
cover
cover,一段后缀加
L
当
l
e
n
≤
m
len\le m
len≤m 时我们暴力
m
2
m^2
m2
D
P
DP
DP
否则我们考虑最后的串一定是
T
T
T 删去一部分并且这部分在
S
l
.
.
.
r
S_{l...r}
Sl...r 中出现
记
d
p
i
,
j
dp_{i,j}
dpi,j 表示考虑到第
i
i
i 位,删了
j
j
j 个匹配到最前面的点是哪一个
那么转移就是
d
p
i
,
j
=
min
{
d
p
i
−
1
,
j
−
1
,
t
r
a
n
s
(
T
i
,
d
p
i
−
1
,
j
)
}
dp_{i,j}=\min\{dp_{i-1,j-1},trans(T_i,dp_{i-1,j})\}
dpi,j=min{dpi−1,j−1,trans(Ti,dpi−1,j)}
其中
t
r
a
n
s
trans
trans 表示下一个字符的出现位置