T1:
有一个区间,将一个区间[l,r]分裂为若干个区间(可有间隙)(允许区间与下一个区间相交1长度),使得价值若干个区间的
a
r
−
a
l
a_r-a_l
ar−al的和最大
操作:
1.询问分裂[l,r]区间的价值
2.将[l,r]变为等差数列
n,m<=200000
一开始想到将大区间划分为一堆递增区间,然后用类似于分块的处理方法处理,后来觉得不一定对,而且处理下降序列比较复杂,还比较慢……
根本就没写完
由于
a
r
−
a
l
=
−
a
l
+
a
l
+
1
−
a
l
+
1
+
…
…
+
a
r
a_r-a_l=-a_l+a_{l+1}-a_{l+1}+……+a_r
ar−al=−al+al+1−al+1+……+ar
就可以将分裂的区间长度固定在2
设
b
i
=
m
a
x
(
a
i
−
a
i
−
1
,
0
)
b_i=max(a_i-a_{i-1},0)
bi=max(ai−ai−1,0),即如果价值为负,则可记为0,即不选
则操作1为
∑
i
=
l
+
1
r
b
i
\sum_{i=l+1}^{r}b_i
∑i=l+1rbi 区间加法
操作2为区间修改,因为
b
i
b_i
bi就是两数的差,而等差数列就是“等差”,所以可以直接区间覆盖修改,额外单独处理两端点处就可以了
用一个线段树维护即可
T2:
求长度为
2
m
2m
2m的包含n个字符串为子串的反对称的字符串个数
本来写了个暴力dfs+暴力字符串匹配,本来以为稳拿10分,结果。。
没了
正解是一个在AC自动机上跑状压DP的
告辞
T3:
对一个矩阵染色,有黑白,至少a行b列是黑色,求方案数
一眼容斥。。但是我不会容斥
觉得暴力很有难度
告辞