比赛链接
T1
一看就是整除分块的形式,如何整除分块
发现对于
j
≤
i
j\le\sqrt i
j≤i,
⌊
i
j
⌋
\left \lfloor \frac{i}{j }\right \rfloor
⌊ji⌋ 对应这唯一的值,暴力乘
对于
j
≥
s
q
r
t
i
j\ge sqrt i
j≥sqrti,
⌊
i
j
⌋
\left \lfloor \frac{i}{j }\right \rfloor
⌊ji⌋ 的值可能有一段区间
[
l
,
r
]
[l,r]
[l,r] 都是这个值
而 b 的下标可以去到的值就是
i
−
⌊
i
j
⌋
∗
j
(
j
∈
[
l
,
r
]
)
i-\left \lfloor \frac{i}{j }\right \rfloor*j(j\in[l,r])
i−⌊ji⌋∗j(j∈[l,r])
就是区间
[
i
−
r
⌊
i
j
⌋
,
i
−
l
⌊
i
j
⌋
]
[i-r\left \lfloor \frac{i}{j }\right \rfloor,i-l\left \lfloor \frac{i}{j }\right \rfloor]
[i−r⌊ji⌋,i−l⌊ji⌋]之间每割
⌊
i
j
⌋
\left \lfloor \frac{i}{j }\right \rfloor
⌊ji⌋个位置的 b 的和,发现
⌊
i
j
⌋
≤
n
\left \lfloor \frac{i}{j }\right \rfloor\le \sqrt n
⌊ji⌋≤n
直接开
n
\sqrt n
n 个数组预处理前缀和即可
T2
D
A
G
DAG
DAG 上玩一玩支配树就好
口胡支配树:建出一棵树,祖先支配子孙,假设当前处理到的
x
x
x,入度为 0,也就是之前能到它的已经处理好(在支配树中),然后对于一个点,能支配它的就是它到根的链,于是能支配当前点
x
x
x的,就是可以到它的点在支配树上的
l
c
a
lca
lca
T3
首先有
n
p
2
np^2
np2 的
d
p
dp
dp,
f
i
,
j
,
k
f_{i,j,k}
fi,j,k 表示到 i,
∑
a
i
x
i
=
j
\sum a_ix_i=j
∑aixi=j,
∑
b
i
x
i
=
k
\sum b_ix_i = k
∑bixi=k 的
∑
c
i
x
i
\sum c_ix_i
∑cixi 的最大值
转移枚举当前选不选就可以了
仔细观察数据范围,觉得应该是
O
(
n
p
)
O(np)
O(np) 的,然后发现
∑
a
i
x
i
≤
p
\sum a_ix_i\le p
∑aixi≤p,
∑
b
i
x
i
≥
p
\sum b_ix_i \ge p
∑bixi≥p
限制条件是相同的,于是令
f
i
,
j
f_{i,j}
fi,j 表示
∑
a
i
x
i
≤
j
\sum a_ix_i\le j
∑aixi≤j,
∑
b
i
x
i
≥
j
\sum b_ix_i \ge j
∑bixi≥j 的
∑
c
i
x
i
\sum c_ix_i
∑cixi 的最大值
如果当前不选,
f
i
,
j
=
f
i
−
1
,
j
f_{i,j}=f_{i-1,j}
fi,j=fi−1,j
如果当前选
f
i
,
j
=
m
a
x
(
f
i
−
1
,
k
)
+
c
i
(
k
∈
[
i
−
b
i
,
i
−
a
i
]
)
f_{i,j}=max(f_{i-1,k})+c_i(k\in [i-b_i,i-a_i])
fi,j=max(fi−1,k)+ci(k∈[i−bi,i−ai])
单调队列优化即可,数组可以滚动
总结:
不错的一套题
学到了分块的重要思想,直接求的有哪些,需要预处理的有哪些
然后手玩了一下支配树
学到了通过数据范围猜状态,通过限制条件的相似性减少状态