20180818模拟赛

T1:
有一个区间,将一个区间[l,r]分裂为若干个区间(可有间隙)(允许区间与下一个区间相交1长度),使得价值若干个区间的 a r − a l a_r-a_l aral的和最大
操作:
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 aral=al+al+1al+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(aiai1,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列是黑色,求方案数

一眼容斥。。但是我不会容斥

觉得暴力很有难度
告辞

10min爆0离场

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值