区间mex:
枚举mex,check区间
在区间内找一个长度为k的段,使段内最小值最大:
枚举这个最小值,让区间内比这个值大的为地方为1否则为0,线段树维护是否有长度不小于k的连续段
最大值最小,最小值最大
二分答案+check
双端队列优化01bfs
0从队头进队,1从队尾进队,如果一个点被访问过直接标记并不再进队
a -> b b -> c 问题
考虑可以建图,形似图论,也可以处理成每个位置有两个属性ab,要求相邻两位置至少有一个属性相同,并且连续三个位置某个属性不能一样
连边考虑对于一个位置(a,b) 连一条a->b的边, 相当于每一次选择 ,都是一种强制转换
每个位置选定一个值,值不重复,并且这个值可能同时是多个位置的备选项
二分图匹配
二维dp f i , j f_{i,j} fi,j 不满足可以二分 三分
考虑是否满足决策单调性,此时不关心值之间的单调性,只关心靠后的最小值永远不会被靠前的最大值替代,及靠前的较劣位置一定没用
线性dp总个数一定记为n,m个人,不关注每个人分到的具体个数只关心相对差距
可以考虑添加相同的一段人同时给”1“,然后具体的分配相当于是已经有的 k k k 个人每个人多同时多一个,这样相对不变
计数区间dp避免重复:
可以钦定分割的位置所选的区间为下属的第一个整体来避免重复
树形dp 子节点中至少有一个 1 类型点
f
[
x
]
[
o
p
]
=
∑
m
i
n
(
f
[
y
]
[
0
]
,
f
[
y
]
[
1
]
)
f[x][op]=\sum min(f[y][0],f[y][1])
f[x][op]=∑min(f[y][0],f[y][1])
v
a
l
=
m
i
n
(
v
a
l
,
(
f
[
y
]
[
1
]
−
m
i
n
(
f
[
y
]
[
0
]
,
f
[
y
]
[
1
]
)
)
val=min(val,(f[y][1]-min(f[y][0],f[y][1]))
val=min(val,(f[y][1]−min(f[y][0],f[y][1]))
val 相当于是:最少要补上的差价
最后
f
[
x
]
[
o
p
]
+
=
v
a
l
f[x][op]+=val
f[x][op]+=val