T1:circle
小 w 的男朋友送给小 w 一n 个m 条边的图,并且刁难小 w 要她找出点数最少的正环
小 w 不会做,于是向你求助。
好像暴力
92
92
92%,打挂了
32
32
32%
CF147B smile house
考虑dp
f
[
i
]
[
j
]
[
k
]
f[i][j][k]
f[i][j][k]表示从
j
j
j到
k
k
k走了
2
i
2^i
2i步的最大价值
类似于Floyd 最小环算法,枚举中间走过的点取最大值
二分最小步数,判断是否成立
时间效率
O
(
n
3
log
n
2
)
O(n^3 \log n^2)
O(n3logn2)
卡常
利用倍增的思想,跳到第
2
i
2^i
2i时满足时再往下找最大的
j
j
j使得
2
i
−
2
j
2^i-2^j
2i−2j成立
时间效率
O
(
n
3
log
n
)
O(n^3 \log n)
O(n3logn)
还是卡常好
T2:max
*小 h 的男朋友送给小 h 一个长度为 的序列,并且刁难小 h 要她找出其中 m 个区间的最大值。
小 h 不会做,于是向你求助。 *
输入是生成函数,本以为会有规律,没找到
数据结构裸题,大力线段树就好
普通线段树会被卡常,
70
70
70%
−
100
-100
−100%
正解zkw线段树,常数优秀
可写树状数组,还有一种玄学写法(by lhy)看不懂
T3:seq
*小y 的男朋友送给小y 一个数列
a
i
{a_i}
ai,并且刁难小y 要她维护这个序列。
具体而言,小y 的男朋友要求小y 完成两个操作:
- 修改数列中的一个数
- 设
p
i
p_i
pi表示
m
a
x
j
=
1
i
a
j
max_{j=1}^ia_j
maxj=1iaj,求出
∑
i
=
1
n
p
i
\sum_{i=1}^{n}p_i
∑i=1npi
小y 不会做,于是向你求助。*
考场只会增大操作,减小不会写,
n
2
n^2
n2大力
25
25
25%
正解不会写
神仙线段树浪费我两个下午的时间
orz slz lhy Jyc pjd lkw xjq szm
我们考虑若修改了
i
i
i 点,显然只会对在它后面的点有影响。
现在我们在线段树上考虑这个问题。设
n
o
d
e
node
node 是线段树上代表
[
l
;
r
]
[l; r]
[l;r] 区间的点,
l
s
;
r
s
ls; rs
ls;rs 分别是
n
o
d
e
node
node 的左右儿子,
v
v
v 是数列位置在
l
l
l 之前一个被修改的值。
那么:
- 若 v v v 大于 m a x . l s max.ls max.ls ,显然 [ l ; m i d ] [l; mid] [l;mid] 区间内的点的 p i pi pi 都会被修改为 v v v(注意这里的 p i pi pi 并不是正确值,必须要递归回到树顶才是真正的 p i pi pi),于是我们只需要递归 r s rs rs。
- 若
v
v
v 小于
m
a
x
.
r
s
max.rs
max.rs ,则
[
m
i
d
+
1
;
r
]
[mid + 1; r]
[mid+1;r] 的
p
p
p 不会被更新,于是我们只需要递归
l
s
ls
ls。
这样,线段树上每合并两个节点,都需要用左儿子更新一次右儿子。
复杂度 O ( n l o g 2 n ) O(n log2 n) O(nlog2n)
代码详见
https://blog.csdn.net/Johnny817/article/details/83215191