考虑怎么转化这个性质。等价于,不能存在一个区间,里面同时存在
(
a
,
b
)
,
(
b
,
c
)
(a,b),(b,c)
(a,b),(b,c)而不存在
(
a
,
c
)
(a,c)
(a,c)。
由此可以想到传递闭包:每个区间,如果建一个图,就都必须具有传递性。
然后我们发现,只需要每个前缀都有传递性,每个后缀都有传递性就好了。
不要问我怎么想到的,以及证明,国内谜语人太多了,可以去骂写题解的人
也就是说,任取一个
i
i
i,设
G
i
G_i
Gi为考虑前
i
i
i条边组成的图,那么
G
i
G_i
Gi和
G
i
G_i
Gi的补图都有传递性。
有一个很神奇的结论:满足这样条件的
G
G
G恰好有
n
!
n!
n!个,这是因为,任取一个排列
p
p
p,如果
a
<
b
a<b
a<b并且
a
a
a在
p
p
p中的位置在
b
b
b的后面,那么连边
(
a
,
b
)
(a,b)
(a,b),这样构造出来的图一定是满足传递性的,并且这是一个双射。
可能打表反而更实际一些
然后,最无脑的想法是,因为合法的前缀只有
n
!
n!
n!个,所以状态数只有
O
(
n
!
)
O(n!)
O(n!),也就是说可以直接把整张图的每条边存起来,然后暴力转移。不过既然我们都知道这样的
G
G
G和一个排列
p
p
p构成双射了,那么在
p
p
p中转移则显得合情合理,一个合法的
G
G
G加入一条边
(
a
,
b
)
(a,b)
(a,b)后仍然合法,当且仅当
G
G
G对应的排列
p
p
p中
a
a
a恰好在
b
b
b前面的位置,加入边
(
a
,
b
)
(a,b)
(a,b)相当于是交换
(
a
,
b
)
(a,b)
(a,b)的位置。
复杂度
O
(
n
!
×
n
)
O(n!\times n)
O(n!×n)。
另外,这题的想法也太聪明了吧。。。
考场上只写了
20
p
t
s
20pts
20pts的暴搜,大概是因为被搞心态了所以没想到
40
p
t
s
40pts
40pts的无脑状压
d
p
dp
dp,不过这种失分还是挺无语的
直接用数据结构暴力维护就能做到
O
(
n
2
log
w
)
O(n^2\log w)
O(n2logw),可以得到
70
p
t
s
70pts
70pts。
然而没写对拍结果写炸了,警钟长鸣
接下来一步应该容易想到:对于
max
\max
max相同的区间,我们每次要取出
min
\min
min最小的那一个,对于这个过程,我们可以用一个
set
\text{set}
set来维护。考虑堆套
set
\text{set}
set,堆里面每个元素维护区间
max
\max
max相同的区间的集合,用
set
\text{set}
set维护这些区间的最小值的位置。这里有一个比较巧妙的想法,就是把堆中的元素存在一个数组里,这样每次从堆中取元素时就不用把它复制一遍了。
复杂度
O
(
n
log
n
)
O(n\log n)
O(nlogn)。
后来发现题解的思路确实更加聪明。
考虑给定
k
k
k,怎么求
g
(
k
)
g(k)
g(k)呢,二分答案
w
w
w,令
a
a
a为给出序列的前缀和,
a
0
=
0
a_0=0
a0=0,每次操作就是对一段后缀
−
1
-1
−1,最后要使得
∀
i
<
j
,
a
j
−
a
i
≤
w
\forall i<j,a_j-a_i\le w
∀i<j,aj−ai≤w。
直接从前往后贪心,维护一个
lim
\text{lim}
lim表示后面的
a
a
a经过操作后都不能超过
lim
\text{lim}
lim。如果
a
i
>
lim
a_i>\text{lim}
ai>lim那么就在这里执行
a
i
−
lim
a_i-\text{lim}
ai−lim次操作,得到新的
a
a
a。然后令
lim
:
=
min
(
lim
,
a
i
+
w
)
\text{lim}:=\min(\text{lim},a_i+w)
lim:=min(lim,ai+w)。
正解非常脑洞。考虑直接把所有
w
w
w的
lim
\text{lim}
lim一起维护,设这个函数为
L
(
w
)
L(w)
L(w),另外维护
A
(
w
)
A(w)
A(w)表示目前的代价。剩下的就是用数据结构大力乱搞。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2022-02-18 【学习笔记】杜教筛
2022-02-18 诈骗233