Cave Paintings
考虑联通状态长成一棵树一样的结构
d
p
dp
dp方程大概就是
f
[
u
]
=
1
+
∏
v
f
v
f[u]=1+\prod_{v}f_v
f[u]=1+∏vfv
从下往上做即可
可以不用建出树来,用并查集维护即可
Non-Decreasing Subsequences
和那道子序列差不多
设
f
[
i
]
[
j
]
f[i][j]
f[i][j]表示第
i
i
i个,前面最大值为
j
j
j的方案数
转移可以写出矩乘的形式
对于
i
i
i位置转移矩阵为
A
a
i
A_{a_i}
Aai
A
j
A_j
Aj为
∀
i
∈
[
0
,
k
]
≠
j
,
A
[
i
]
[
i
]
=
1
,
A
[
j
]
[
j
]
=
2
,
∀
i
∈
[
0
,
j
)
A
[
i
]
[
j
]
=
1
\forall i\in[0,k]\not=j,A[i][i]=1,A[j][j]=2,\forall i\in [0,j)A[i][j]=1
∀i∈[0,k]=j,A[i][i]=1,A[j][j]=2,∀i∈[0,j)A[i][j]=1
观察到
A
j
A_j
Aj的逆矩阵
B
j
B_j
Bj就是
∀
i
∈
[
0
,
k
]
≠
j
,
A
[
i
]
[
i
]
=
1
,
A
[
j
]
[
j
]
=
1
2
,
∀
i
∈
[
0
,
j
)
A
[
i
]
[
j
]
=
−
1
2
\forall i\in[0,k]\not=j,A[i][i]=1,A[j][j]=\frac 1 2,\forall i\in [0,j)A[i][j]=-\frac 12
∀i∈[0,k]=j,A[i][i]=1,A[j][j]=21,∀i∈[0,j)A[i][j]=−21
于是每次询问就是
[
1
,
0
,
0
,
0...0
]
∗
B
l
−
1
∗
.
.
.
∗
B
1
∗
A
1
∗
.
.
.
.
.
A
r
∗
[
1
1
⋮
1
]
[1,0,0,0...0]*B_{l-1}*...*B_1*A_1*.....A_{r}*\left[\begin{matrix} 1\\ 1\\ \vdots \\1\end{matrix}\right]
[1,0,0,0...0]∗Bl−1∗...∗B1∗A1∗.....Ar∗⎣⎢⎢⎢⎡11⋮1⎦⎥⎥⎥⎤
每次左乘
B
B
B和右乘
A
A
A,由于是稀疏矩阵,所以是
O
(
k
2
)
O(k^2)
O(k2)的
又是上三角,枚举可以只用
1
6
\frac 1 6
61
但是由于矩阵没子序列那个性质优秀,只能做到
O
(
n
k
2
+
q
k
)
O(nk^2+qk)
O(nk2+qk)
Falling Portals
观察到实际上可以变成二维平面点
(
i
,
A
i
)
(i,A_i)
(i,Ai)
每次走到的点斜率要单增
要求每次最后一步斜率最小
考虑对于
A
i
>
A
q
i
A_i>A_{q_i}
Ai>Aqi和
<
<
<分别处理
对于
A
i
<
A
q
i
A_i<A_{q_i}
Ai<Aqi
如果要斜率变小,就相当于
找到点
j
j
j 满足
j
<
min
(
i
+
1
,
q
i
)
,
A
j
≤
A
i
j<\min(i+1,q_i),A_j\le A_i
j<min(i+1,qi),Aj≤Ai且
j
,
q
i
j,q_i
j,qi之间斜率最小(
j
j
j可以为
i
i
i)
想一下就是
i
i
i左下角的一个凸包
从下往上维护一个凸包,那么这个凸包的
x
x
x是单峰的
可以二分出
x
<
min
(
i
+
1
,
q
i
)
x<\min(i+1,q_i)
x<min(i+1,qi)的一段区间然后再二分最小斜率即可
对于
A
i
>
A
q
i
A_i>A_{q_i}
Ai>Aqi类似维护一个右上的凸包即可
code