【学习笔记】前缀和+差分

「JOISC 2019 Day2」两道料理

我会暴力!!10pts滚粗

我会转化!!记 s a i = ∑ j = 1 i a j , s b i = ∑ j = 1 i b j sa_i=\sum_{j=1}^i a_j,sb_i=\sum_{j=1}^i{b_j} sai=j=1iajsbi=j=1ibj

x i = max ⁡ { j ∣ s a i + s b j ≤ s i } , y i = max ⁡ { j ∣ s b i + s a j ≤ t i } x_i=\max\{j|sa_i+sb_j\le s_i\},y_i=\max\{j|sb_i+sa_j\le t_i\} xi=max{jsai+sbjsi}yi=max{jsbi+sajti}

c i c_i ci表示完成 I O I IOI IOI i i i个步骤后 J O I JOI JOI的完成数目

那么 c i ≥ c i − 1 c_i\ge c_{i-1} cici1,答案是 ∑ i = 1 n p i [ c i ≤ x i ] + ∑ i = 1 m q i [ c y i ≥ i ] = ∑ i = 1 n p i − ∑ i = 1 n p i [ c i ≥ x i + 1 ] + ∑ i = 1 m q i [ c y i ≥ i ] \sum_{i=1}^np_i[c_i\le x_i]+\sum_{i=1}^mq_i[c_{y_i}\ge i]=\sum_{i=1}^np_i-\sum_{i=1}^np_i[c_i\ge x_i+1]+\sum_{i=1}^mq_i[c_{y_i}\ge i] i=1npi[cixi]+i=1mqi[cyii]=i=1npii=1npi[cixi+1]+i=1mqi[cyii]

d p j dp_j dpj表示完成 J O I JOI JOI j j j个步骤的最大评分。转移的本质是对若干段后缀加一个值,然后取前缀 max ⁡ \max max

发现前缀 max ⁡ \max max可以暴力做。维护其差分序列,可以用 s e t set set模拟,具体 ( l , x ) (l,x) (l,x)表示 l l l位置的差分序列是 x x x。如果 x < 0 x<0 x<0那么删掉这个位置,然后让后继的差分 + x +x +x

复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

第一步没转化出来就很尴尬

AC Code

Juju and Binary String

巧妙的题目。

将字符串 s s s拼成一个环,那么一定存在长度 m m m的子段满足条件。因此答案不超过 2 2 2

证明:设 a i a_i ai表示 [ i , i + m − 1 ] [i,i+m-1] [i,i+m1] 1 1 1的数目。记 p p p表示原串中 1 1 1的数目, t o t = p m n tot=\frac{pm}{n} tot=npm 。注意到 ∣ a i − a i − 1 ∣ ≤ 1 |a_i-a_{i-1}|\le 1 aiai11,因此我们只需要证明 min ⁡ ( a i ) ≤ t o t ≤ max ⁡ ( a i ) \min(a_i)\le tot\le \max(a_i) min(ai)totmax(ai) 。证明考虑 ∑ i = 1 n a i = m × p \sum_{i=1}^na_i=m\times p i=1nai=m×p

「EC Final 2018」Exotic … Ancient City

不会不会不会

我会转化!!问题转化为求生成树上 ≤ w \le w w的边的数目

显然我们只关心 ( i , i + 1 ) (i,i+1) (i,i+1)层的连通性 并不显然

那么维护大小为 2 n 2n 2n的并查集。递推到下一层时,继承了上一层的连通性,并且若上一层右部图 ( u , v ) (u,v) (u,v)联通,则下一层左部图 ( u , v ) (u,v) (u,v)也联通。

看起来很玄学。并查集时设右部图为根。

具体看实现 AC Code

Frequency Problem

结论题。

我会转化!!最优区间的众数 x x x一定包含全局众数。

那么枚举另一个众数 y y y,可以前缀和优化到 O ( n a ) O(na) O(na)

我会优化!!

对于出现次数 ≥ n \ge \sqrt{n} n 的,还是前缀和优化,复杂度 O ( n n ) O(n\sqrt{n}) O(nn )

对于出现次数 < n <\sqrt{n} <n 的,枚举区间里全局众数的出现次数 i i i,判断其极大区间是否存在另一个数的出现次数不少于 i i i,复杂度 O ( n n ) O(n\sqrt{n}) O(nn )

这样可以通过Hard Version。

Mobile Phone Network

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值