Number of k-good subarrays

我们发现,如果我们将满足题意的点在数轴上标出,那么我们可以获得若干个连续段。对于一个长度为l的连续段,他对答案的贡献就是l(l+1)2,我们把所有连续段的贡献加起来就得到了答案

于是我们发现这个可以拆分成子问题,具体见这篇题解sol(nmx,k1)就是拆分成的子问题,因为对于[2c,n1]这段区间的点的标记情况与[0,nmx1]这段区间的标记情况是完全一样的(指对于i[2c,n1],j[0,nmx1],i=j+2ci被标记当且仅当j被标记)

中间减去的那个段相当于合并,比如下图

image

我们的分治算法是将绿色和红色的段当成两个段的,但实际上应该当做一个段,这个时候就要分别减去绿色的贡献和红色的贡献,再加上绿色加红色的贡献就好了

实际上我们到跟二进制有关,最多只有60位,就用的数位DP做的,但是细节比较多。只不过记住,二进制的题目也有可能拿数位DP做(当然这之前不妨想一想分治)

posted @   最爱丁珰  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示