A. Perfectly Imperfect Array
点点点
B. AND 0, Sum Big
点点点
C. Product 1 Modulo N
题意:
找到
{
1
,
2
,
.
.
.
,
n
−
1
}
\{1,2,...,n-1\}
{1,2,...,n−1}的最长子序列,使得序列的乘积
%
n
=
1
\% n = 1
%n=1
题解:
构造法
显然选取的数应该与
n
n
n互质,选取这些数,其乘积即为
p
p
p,那么在
p
≠
1
p \neq 1
p=1时,去除
p
p
p即可。
D. Cut and Stick
题意:
给定一组数
n
(
1
⩽
n
⩽
3
⋅
1
0
5
)
n\left(1\leqslant n\leqslant 3\cdot10^5\right)
n(1⩽n⩽3⋅105),在给定区间内划分子序列,使得每个子序列中出现次数最多的数的数量小于等于
⌈
x
2
⌉
\lceil \frac{x}{2} \rceil
⌈2x⌉,其中
x
x
x为该子序列长度。求每个询问
q
(
1
⩽
n
⩽
3
⋅
1
0
5
)
q\left(1\leqslant n\leqslant 3\cdot10^5\right)
q(1⩽n⩽3⋅105)区间
[
L
,
R
]
[L,R]
[L,R]的最小划分子序列数量。
题解:
区间长度已给定,且是子序列,那么我们只需要找到该区间内出现次数最多数的数量,记长度为
l
e
n
len
len,数量为
n
u
m
num
num,划分次数为
k
k
k,那么只需要满足
n
u
m
−
k
+
1
⩽
⌈
l
e
n
−
k
+
1
2
⌉
num - k + 1 \leqslant \lceil \frac{len - k + 1}{2} \rceil
num−k+1⩽⌈2len−k+1⌉,这可以用二分找到最小k。时间复杂度为
O
(
l
o
g
n
)
O(logn)
O(logn)。
而区间内出现最多次数可以用莫队解决。需要注意的是,我们用莫队维护的是最大值,那么减操作是不可行的。一个技巧是先维护
(
u
n
i
t
,
R
]
(unit, R]
(unit,R]的数量,再遍历
[
L
,
u
n
i
t
]
[L, unit]
[L,unit]。时间复杂度为
O
(
n
n
)
O(n\sqrt{n})
O(nn)。
在Tutorial中,提出了对 ⌈ x 2 ⌉ \lceil \frac{x}{2} \rceil ⌈2x⌉的特定优化问题,然而我没想出来,等一个神犇。