一个序列 A A A可以每次选择一段区间 ( A i + 1 ) % 4 ( i ∈ [ l . . r ] ) (A_{i}+1)\%4(i\in [l..r]) (Ai+1)%4(i∈[l..r])。求最少次数使其变成 B B B序列。
先计算出每个数字最少加多少可以变成目标数字记录入 a a a数组。
然后若不考虑一个数要取模多次的话答案就是 ∑ i = 1 n max { a i − a i − 1 , 0 } ( a 0 = 0 ) \sum_{i=1}^n \max\{a_i-a_{i-1},0\}(a_{0}=0) i=1∑nmax{ai−ai−1,0}(a0=0)
但是这道题变成了每个柱子的高度是 4 k i + a i ( k ∈ N ) 4k_{i}+a_{i}(k\in \mathbb{N}) 4ki+ai(k∈N) 那么我们考虑若一段区间 [ l . . r ] [l..r] [l..r]的 k k k要加1会更优那么有 a l − a l − 1 + 4 < a r + 1 − a r a_{l}-a_{l-1}+4<a_{r+1}-a_{r} al−al−1+4<ar+1−ar 那么答案就可以减去 ( a r + 1 − a r ) − ( a l − a l − 1 + 4 ) (a_{r+1}-a_{r})-(a_{l}-a_{l-1}+4) (ar+1−ar)−(al−al−1+4) 那么我们枚举 r r r,开个桶来计算 l l l
