CF364E
算法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)\)。
随机推荐
- 剑指offer004(Java)-只出现一次的数字(中等)
题目: 给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 .请你找出并返回那个只出现了一次的元素. 示例1: 输入:nums = [2,2,3,2] 输出:3 示例 ...
- 力扣9(java)-回文数(简单)
题目: 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 例如,121 是回文,而 123 不 ...
- 如何专业化监控一个Kubernetes集群?
简介: 本文会介绍 Kubernetes 可观测性系统的构建,以及基于阿里云云产品实现 Kubernetes 可观测系统构建的最佳实践. 作者:佳旭 阿里云容器服务技术专家 引言 Kubernetes ...
- dotnet 给 NuGet 包加上 Aliases 别名解决类型冲突
有时某个相同命名空间相同名字的类型被两个不同的 NuGet 包定义了,尽管这是非常少见的事情,咱需要使用到其中的一个 NuGet 包的类型,但默认情况下将会因为类型冲突而构建不通过.本文将告诉大家如何 ...
- Ubuntu 20.04版本安装k8s控制节点与控制节点升级
一.环境配置 服务器配置:2核4G IP:192.168.10.23 主机名:master4将改主机加入此 集群 # 1.修改主机名 hostnamectl set-hostname master4 ...
- LVGL 字体
一.LVGL 内置字体 LVGL有几种不同大小的内置字体,可以通过 LV_FONT_MONTSERRAT_X 定义在 lv_conf.h 中启用. 普通字体 包含所有ASCII字符,度数符号(U + ...
- Photoshop批量替换图层的方法
平时做图片,应该有遇到这样的场景,比如P奖状.P邀请函,内容是一样的,但是图片上的名字是不一样的,要是要P100张的话,一个个手动复制改名字肯定会吐血(╯°□°)╯︵ ┻━┻ Photoshop里有个 ...
- 【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台
1. 项目介绍 基于.NET Framework 4.8 开发的深度学习模型部署测试平台,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det.Seg.Pose.Obb ...
- WEB服务与NGINX(20)- nginx 实现HTTP反向代理功能
目录 1. nginx实现反向代理功能 1.1 nginx代理功能概述 1.2 NGINX实现HTTP反向代理 1.2.1 HTTP反向代理基本功能 1.2.1.1 反向代理配置参数 1.2.1.2 ...
- Git基本操作命令大全
一.全局配置命令 ## 配置级别: –local(默认,高级优先):只影响本地仓库 –global(中优先级):只影响所有当前用户的git仓库 –system(低优先级):影响到全系统的git仓库 # ...