problem

算法1

我会暴力!!!

直接枚举右上角和左下角,然后计算答案,使用前缀和优化后时间复杂度为 \(O(n^4)\)。

算法2

我会分治!!!。

我们知道答案就是左边+右边+两边都有的个数。

左右递归求解即可,所以考虑两边都有的个数。

我们知道满足有 \(k\) 个 \(1\) 的可能为上面有 \(i\) 个点,下面有 \(k - i\) 个点,\(i \in [0,k]\)。于是我们可以考虑维护上面的矩阵有 \(i\) 个点的情况数。

先枚举左右端点,表示我们想要求的矩阵的左右两边。

对于每一个宽度我们会考虑到底有多少个矩阵有 \(i\) 个 \(1\)。于是定义 \(up_{0,i}\) 为在规定左右两边的情况下上边界到 \(mid\) 的矩阵中的 \(1\) 的个数 \(<i\) 的最大值。同理定义 \(up_{1,i}\) 为在规定左右两边的情况下 \(mod\) 到下边界的矩阵中的 \(1\) 的个数 \(<i\) 的最小值。

于是我们就知道上边界到 \(mid\) 组成的矩阵中有 \(i\) 个 \(1\) 的个数为 \(up_{0,i} - up_{0,i + 1}\)。

所以我们可以暴力的去求解这个值,由于左右两边会移动,所以我们的 \(up\) 数组也在变化。假如我们每一次都遍历一遍去 \(up\) 数组,那是肯定会超时的,考虑优化。

我们先来研究当右端点往后一一位后 \(up\) 的变化。在这里我就以 \(up_0\) 为例,\(up_1\) 同理。

1.后面那一列并没有任何 \(1\)

很明显他是不会变的,这应该可以理解吧。所以左端点为 \(i\),右端点为 \(j\) 对应的 \(up_{0,k}\) 就等于左端点为 \(i\),右端点为 \(j + 1\) 对应的 \(up_{0,k}\)。

2.后面那一列有 \(1\)

我们可以画个图来感性理解一下。

我们发现这个数下降了,但是这个数还有可能是不变的,这个情况就留给读者自己构造。

综上左端点为 \(i\),右端点为 \(j\) 对应的 \(up_{0,k}\) 小于等于左端点为 \(i\),右端点为 \(j + 1\) 对应的 \(up_{0,k}\)。

\(up_1\) 也是如此。

所以我们就知道 \(up\) 数组拥有单调性。于是我们就可以像单调队列一样去维护 \(up\) 数组了。

求出 \(up\) 数组后,本题就很简单了,答案就是上面的矩阵有 \(i\) 个点的情况 \(\times\) 下面的矩阵有 \(k - i\) 个点的情况。

二维分治有两种写法,第一种是横着劈一刀,然后竖着劈一刀,还有一种就是每一次都劈两条边中更长的那条长的。

上面讲的 \(up\) 的维护方法是横着劈的,竖着劈同理。

时间复杂度为 \(O(knm \log n)\)。

code

随机推荐

  1. Java面试题:细数ThreadLocal大坑,内存泄露本可避免

    一.背景ThreadLocal是Java中用于解决多线程共享变量导致的线程安全问题的一种机制.它为每个线程分配一个独立的变量副本,从而避免了线程间的数据竞争.这个我们从上一篇文章<Java面试题 ...

  2. 力扣1097(MySQL)-游戏玩法分析Ⅴ(困难)

    题目: 我们将玩家的安装日期定义为该玩家的第一个登录日. 我们还将某个日期 X 的第 1 天留存时间定义为安装日期为 X 的玩家的数量,他们在 X 之后的一天重新登录,除以安装日期为 X 的玩家的数量 ...

  3. 力扣388(java)-文件的最长绝对路径(中等)

    题目: 假设有一个同时存储文件和目录的文件系统.下图展示了文件系统的一个示例: 这里将 dir 作为根目录中的唯一目录.dir 包含两个子目录 subdir1 和 subdir2 .subdir1 包 ...

  4. 极致体验!基于阿里云 Serverless 快速部署 Function

    简介: 云计算的不断发展,涌现出很多改变传统 IT 架构和运维方式的新技术,而以虚拟机.容器.微服务为代表的技术更是在各个层面不断提升云服务的技术能力,它们将应用和环境中很多通用能力变成了一种服务.但 ...

  5. Dubbo3.0|阿里巴巴服务框架三位一体的选择与实践

    ​简介: 服务框架就像铁路的铁轨一样,是互通的基础,只有解决了服务框架的互通,才有可能完成更高层的业务互通,所以用相同的标准统一,合二为一并共建新一代的服务框架是必然趋势.Dubbo3.0 是 Dub ...

  6. PostMan测试图片上传接口的方法

    一.选择POST后添加接口地址 二.选择Body下的from-data 注:Headers不要加参数 三.填写key,再key后的下拉选择file,然后选择文件 注:key并不是图片名称,而是接口接收 ...

  7. k8s应用---持久化存储和StorageClass(10)

    一.简介: 在 k8s 中为什么要做持久化存储? 在 k8s 中部署的应用都是以 pod 容器的形式运行的,假如我们部署 MySQL.Redis 等数据库,需要 对这些数据库产生的数据做备份.因为 P ...

  8. The instance of entity type 'Model' cannot be tracked because another instance with the same key value for {'Id'} is already being tracked.

    The instance of entity type 'Model' cannot be tracked because another instance with the same key val ...

  9. 移动端、微信小程序兼容性问题汇总(持续更新……

    1. safari浏览器字体不能自动随网页缩放调整大小 -webkit-text-size-adjust:100% 2. 点击<button><input>有灰色透明背景 -w ...

  10. 一个可以输出当前移动设备机型(安卓,ios)系统版本的html页面

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...