每天做的题的题解都扔上来,以后好复习
10.22
jzoj5919:
找出所有环,拿出左右端点,set维护r[i]表示以i作为左端点时右端点最右是多少,二分统计答案
jzoj5920:
先求出两个数组start,end.start[i]表示以i为开头的LIS,end[i]表示以i为结尾的LIS.一个结论:如果一个数存在于多个LIS中,那么它的排名是一样的,如果start[i] + end[i] == K + 1(K 为最长LIS长度),那么这个a[i]在LIS中.之后讨论一下,有主席树和离线树状数组两种方法,我比较蠢,写了主席树(不会离线 ).
10.23
jzoj5922:
结论:一个数列[l…r]及k,使a[i] +=
C
i
+
k
−
l
k
C_{i+k-l}^k
Ci+k−lk等价于使[l…r]{初值均为1}前缀和k次.
知道结论后就好做了,由于k的范围很小,可以分成k个序列来差分,从大的往小的做,每次差分完注意减去影响.
jzoj5923:
关于图的连通性的DP,一般分成三种情况.
连通情况+不连通情况==所有情况.
处理完就好做了
10.24
jzoj5924:
分块之后直接双端队列维护就好了
STL:deque是双端队列
10.25
jzoj5925:
注意一个结论,就是一个点的颜色最多只会改变两次.
所以可以考虑DP,设f[i]表示[1…i]变为同一种颜色的最小代价,预处理每个区间的Min和全部变为Min的Cost即可.注意为了保证有一个目标颜色,所以从后往前也做一遍.
n
3
n^3
n3是可以接受的
jzoj5926:
tmd比赛的时候竟然没想到.
把边权从小到大排序,然后对于一条边,它的贡献就是两个连通块之间符合条件的点对数,用启发式合并和权值线段树即可
l
o
g
2
log^2
log2做到.
注意离散化.
10.26
jzoj5928:
打表找规律可以发现总和是这个式子
∑
i
=
1
n
i
∗
2
i
−
1
∗
(
2
+
2
n
)
\sum_{i=1}^{n}{i * 2^{i-1}} *(2+2^n)
∑i=1ni∗2i−1∗(2+2n)
其中
∑
i
=
1
n
i
∗
2
i
−
1
=
∑
i
=
1
n
2
i
−
1
+
∑
i
=
2
n
2
i
−
1
+
∑
i
=
3
n
2
i
−
1
⋯
\sum_{i=1}^{n}{i * 2^{i-1}} =\sum_{i=1}^{n}{2^{i-1}} + \sum_{i=2}^{n}{2^{i-1}} +\sum_{i=3}^{n}{2^{i-1}}\cdots
∑i=1ni∗2i−1=∑i=1n2i−1+∑i=2n2i−1+∑i=3n2i−1⋯
换下形式,最后搞出来这个
[
(
n
−
1
)
∗
2
n
+
1
]
∗
(
2
+
2
n
)
[(n-1)*2^n+1]*(2+2^n)
[(n−1)∗2n+1]∗(2+2n)
这可以用快速幂计算,最后乘下逆元即可
jzoj5930:
显然因为质因子间影响是独立的,所以考虑质因子分开来做.
先把所有
a
i
a_i
ai拆成质因子形式,询问也一样.
现在考虑如何解决那个K的限制.
考虑子孙对祖先的影响,显然一个节点只会对它K级父亲以内有影响,于是对于一个节点,我们在它自己处打+标记,在K级父亲处打-标记.(结合dfs序想想)
现在考虑如何统计答案.
显然对于同一个质因子,
q
i
q_i
qi的指数和
a
i
a_i
ai的指数我们需要取个min.
显然可以排序,从前往后做的时候用两个树状数组维护一下.(注意是在dfs序上做)
一个表示指数较小的,记录总和;一个表示指数较大的,记录个数.
注意每次之后由于操作可逆性,我们将操作逆回去清空树状数组.
由于质因子不超过
n
∗
8
n*8
n∗8个,所以复杂度
O
(
8
∗
n
l
o
g
n
)
O(8 * nlogn)
O(8∗nlogn)(常数略大)
10.27
jzoj5931:
递推,很好理解,直接扔式子
设
f
i
f_i
fi表示
n
=
i
n=i
n=i时的
s
u
m
sum
sum
f
i
=
f
i
−
1
+
f
i
−
1
∗
i
!
−
(
i
−
1
)
!
(
i
−
1
)
!
+
i
!
−
(
i
−
1
)
!
f_i=f_{i-1}+f_{i-1}*\frac{i! -(i-1)!}{(i-1)!}+i!-(i-1)!
fi=fi−1+fi−1∗(i−1)!i!−(i−1)!+i!−(i−1)!
O(n)预处理
jzoj5932:
Bitset牛逼
对于每个点宽搜,设
f
[
i
]
[
j
]
f[i][j]
f[i][j]表示第i个点j步以内能到达的点,用bitset搞.
没了
jzoj5933:
由于修改只在一边,倒着建主席树就没了.
我咋就没想过倒着建,cao.
10.29
jzoj5934:
网络流模板题,对于每个限制连一条INF,横纵坐标分别向S,T连1,最小割即可.
jzoj5935:
送分题,区间DP,考场上切了就不多说了.
jzoj5936:
https://blog.csdn.net/P_hillipe/article/details/83550433
10.30
jzoj5937:
贪心,考场上切了就不多说了.
jzoj5938:
首先两个块的形状肯定是阶梯型的
考虑极值的性质,显然两个块的极值的一端一定会包括最大和最小,所以二分出答案后,两个块的权值区间肯定在
[
m
i
.
.
m
i
+
K
]
[mi..mi+K]
[mi..mi+K],
[
m
x
−
K
.
.
m
x
]
[mx-K..mx]
[mx−K..mx]当中.
可以分4种情况贪心解决
11.01
jzoj5941:由于
b
b
b的值域只有
1
0
12
10^{12}
1012,所以直接预处理幂次即可,后续可以
O
(
1
)
O(1)
O(1)计算.
jzoj5942:由于
a
n
d
and
and操作值最多变小
l
o
g
log
log次,维护一下每个区间的序列或去判断,每次暴力修改.对于
3
3
3操作可以拆开,发现维护平方和就好.
jzoj5943:有一个结论就是信标只会在叶子上,随便选一个度数大于
2
2
2的点为根,可以证明这个根一定不会放信标.随后贪心的做,一个节点设有
c
c
c个儿子,则必须在其中至少
c
−
1
c-1
c−1个儿子的子树中放信标.
11.02
jzoj5945:求均摊纸牌的方案数,求出每个点左边需要多少纸牌,右边需要多少纸牌,随后根据平均值分类讨论即可.
jzoj5946:
转化题意后变为找循环节,有个定理.
若
p
p
p是质数且
a
k
≡
1
(
m
o
d
p
)
a^k \equiv 1(mod\ p)
ak≡1(mod p),则
k
∣
p
k | p
k∣p.
然后这题就暴力枚举
k
k
k就好了.
jzoj5947:注意到逆序对个数肯定不超过
n
2
n^2
n2,所以每次操作暴力交换区间内的相邻逆序对,每次交换是
l
o
g
log
log的,所以复杂度是
O
(
(
n
2
+
m
)
l
o
g
n
)
O((n^2+m)log_n)
O((n2+m)logn)
11.03
jzoj5948:每个长度为
L
L
L的段的
s
u
m
sum
sum取最小值即是答案.
jzoj5396:转化题意后变成,找出一个最长的子序列使得序列平均值大于给定的
k
k
k.
11.04
jzoj5949:答案:
n
∗
(
n
−
1
)
2
∗
m
\frac{n * (n - 1)}{2 *m}
2∗mn∗(n−1)
jzoj5950:单调栈维护一个上凸壳即可,每次维护完后答案就是栈顶.
jzoj5951:不写了,吼难.
11.05
jzoj5952:设
b
i
b_i
bi为从
1
1
1到
i
i
i的异或和,预处理一个
f
i
f_i
fi表示
b
j
&
i
=
=
i
\ b_j \& \ i==\ i
bj& i== i的最左的
j
j
j.每次按位贪心,注意到若
b
i
b_i
bi某一位为1,那么对答案贡献仅为1,若某一位为0,对答案的贡献就是0或2.用刚刚处理的
f
f
f数组维护计算即可.
jzoj5953:有定理,原点集重心肯定是对称中心.那些原本就关于对称中心的点先删去,若剩下的点
<
=
2
<=2
<=2就肯定为
−
1
-1
−1.注意到一条直线能包含所有
n
n
n个点,显然要出现
n
/
2
n/2
n/2次,由于这样的直线不超过
n
n
n条,所以暴力做就可以.
jzoj5954:太长了不写了,去看Howarli的博客.原题[UOJ 351]新年的叶子.