【每日一题】ARC137B - Count 1’s

2023-10-30

题目内容

原题链接

给定一个长度为 n n n 的整数数组 a a a a i ∈ [ 0 , 1 ] a_i\in [0,1] ai[0,1]

对于一个子数组 a l , a l + 1 , ⋯   , a r a_l,a_{l+1},\cdots ,a_r al,al+1,,ar ,一次修改操作意味着将 a i = 0 a_i=0 ai=0 修改为 a i = 1 a_i=1 ai=1 ,将 a i = 1 a_i=1 ai=1 修改为 a i = 0 a_i=0 ai=0

问修改至多一次(可以不修改),可以修改出多少种数组和不同的数组 a a a

数据范围

  • 1 ≤ n ≤ 3 × 1 0 5 1\leq n\leq 3\times 10^5 1n3×105
  • 0 ≤ a i ≤ 1 0\leq a_i\leq 1 0ai1

题解

暴力

枚举每个子数组,计算每个子数组翻转后可能有多少个不同的值。用 s e t set set 去重即可。
时间复杂度: O ( n 2 log ⁡ n ) O(n^2\log n) O(n2logn)

正解

这里我们考虑一个问题,翻转后的值有多少种情况,如果是全 0 0 0 ,则可以翻转成 1 1 1 1 1 1 2 2 2 1 1 1 3 3 3 1 1 1 一直到 n n n 1 1 1 ,那么就是 n n n 种情况。

对于我们能将值减少 k k k 的子数组 s u b sub sub ,必能在 s u b sub sub 中选出一个子数组,使得数组的总和减少 k − 1 k-1 k1 ,以此类推,从减少 k k k 到减少 1 1 1 都可以做到。

问题转换为求可以减少最多的次数,这对应子数组中 1 1 1 的数量减去 0 0 0 的数量的最大值 u p up up
我们还需要求可以增加最多的次数,这对应子数组中 0 0 0 的数量减去 1 1 1 的数量的最大值 d o w n down down

最后,我们还可以选择不修改,即值不变。

所以答案为 u p + d o w n + 1 up+down+1 up+down+1

时间复杂度: O ( n ) O(n) O(n)

代码

#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;

    vector<int> a(n);
    for (int i = 0; i < n; ++i) cin >> a[i];

    // 找到一个 1 减 0 数量最多的数组和 0 减 1 最多的数组
    vector<int> cnt(2, 0);

    auto gao = [&](bool is_reverse = false) {
        int res = 0;
        int cur = 0;
        for (int i = 0; i < n; ++i) {
            if (!is_reverse) {
                if (a[i] == 1) cur += 1;
                else cur -= 1;
            } else {
                if (a[i] == 1) cur -= 1;
                else cur += 1;
            }

            res = max(res, cur);
            if (cur < 0) cur = 0;
        }
        return res;
    };

    cout << gao() + gao(true) + 1 << "\n";

    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【每日一题】ARC137B - Count 1’s 的相关文章

随机推荐

  • 隐私信息检索(PIR)

    隐私信息检索 Private Information Retrieval PIR 技术是由Chor B等提出解决保护用户查询隐私的方案 主要目的是 保证查询用户在向服务器上的数据库提交查询请求 在用户查询隐私信息不被泄漏的条件下完成查询 即
  • 数据仓库ETL技术探究

    ETL概述 在构建商业智能系统的时候 如何正确有效地将分散在各个不同数据源中的信息整合到系统中成为了整个系统成败的关键 直接影响到系统的运行效率和最终结果 ETL正是解决这一问题的有力工具 ETL是指把数据从数据源装人数据仓库的过程 即数据
  • three.js 没有投影

    按照demo physics oimo instancing html 敲的 不知道问题出现在哪儿
  • FactoryBean和BeanFactory:Spring IOC容器的两个重要角色简介

    目录 一 简介 二 BeanFactory 三 FactoryBean 四 区别 五 使用场景 总结 一 简介 在Spring框架中 IOC Inversion of Control 容器是一个核心组件 它负责管理和配置Java对象及其依赖
  • 自定义数据类型使用QVariant转换的方法

    QVariant类型的放入和取出必须是相对应的 你放入一个int就必须按int取出 不能用toString Qt不会帮你自动转换 数据核心无非就是一个 union 和一个标记类型的type 传递的是整数 123 那么它union存储整数12
  • STM32定时器的编码器接口模式

    MCU为STM32L431 通用定时器框图 编码器接口模式一共有三种 通过TIMx SMCR寄存器的SMS 3 0 位来选择 模式1计数器仅在TI1FP1的边沿根据TI2FP2的电平来判断向上 下计数 模式2计数器仅在TI2FP2的边沿根据
  • DevTools 无法加载 SourceMap:XXXX.map 的内容:HTTP 错误: 状态代码 404,net::ERR_UNKNOWN_URL_SCHEM

    写在前面 又想骂人了 百度了一圈 各种不同的网站 对于该问题的解决办法的前几句都是 确切来说也不是个问题 对我项目本身没有什么实质性的影响 但看着就是不爽 请教了一下前端的同学 这个 sourceMap 是方便调试的东西 从打包后的代码映射
  • 好看的悬疑电影,最好是高智商的

    穆赫兰道 公认史上最难懂的电影 据说40 的人从电影一开始就理解错误 还有50 的人从头到尾都不知道电影在说什么 看懂这部电影 请先熟读弗洛伊德 梦的解析 死亡幻觉 此片思维难度很大 涉及的知识一般人难以理解 第一遍据说没人看得懂 理解这部
  • OSS设置CORS规则以后还是报No ‘Access-Control-Allow-Origin‘解决方法

    在OSS控制台设置了CORS规则以后 通过JS程序去调用的时候报No Access Control Allow Origin header is present on the requested resource 可以通过下面的思路来进行下
  • Open3D 计算点云凸包

    目录 一 实现依据 二 代码实现 三 结果展示 1 原始点云 2 凸包可视化 3 凸包顶点 一 实现依据 点云的凸包是包含所有点的最小凸集 open3d实现了计算凸包的方法 compute convex hull 这个接口的实现基于Qhul
  • 数据建模中利用3σ剔除异常值进行数据清洗

    方法原理 3 准则又称为拉依达准则 它是先假设一组检测数据只含有随机误差 对其进行计算处理得到标准偏差 按一定概率确定一个区间 认为凡超过这个区间的误差 就不属于随机误差而是粗大误差 含有该误差的数据应予以剔除 在正态分布中 代表标准差 代
  • [机缘参悟-96] :软件中到处充满了人类社会的气息!

    解读操作系统有感 CPU 对于CPU内核而言 调度程序是程序 应用程序也是程序 在它眼里是一样的 公平看待的 因此某种愿意上讲 CPU内核本身就是 上天 就是 道 道德经中讲 天地不仁 以万物为刍 就是这个意思 CPU中的算术单元并不区分什
  • Android 使用Camera1实现相机预览、拍照、录像

    1 前言 本文介绍如何从零开始 在Android中实现Camera1的接入 并在文末提供Camera1Manager工具类 可以用于快速接入Camera1 Android Camera1 API虽然已经被Google废弃 但有些场景下不得不
  • 【Pandas 入门-2】增加,删除与合并数据 concat, merge

    文章目录 1 3 增加 删除与合并数据 1 3 1 增加数据 1 3 2 删除数据 1 3 3 合并数据 1 3 增加 删除与合并数据 1 3 1 增加数据 在原数据末尾增加一列时 语法为 df 新列名 某个值或某个元素个数与 DataFr
  • 框架分析(10)-SQLAlchemy

    框架分析 10 SQLAlchemy 专栏介绍 SQLAlchemy 特性分析 ORM支持 数据库适配器 事务支持 查询构建器 数据库连接池 事务管理器 数据库迁移 特性总结 优缺点 优点 强大的对象关系映射 支持多种数据库 灵活的查询语言
  • 使用Softing edgeConnector模块将云轻松连接到Siemens PLC

    一 工业边缘的连接解决方案 云服务提供商 CSP 引入了服务和功能 以简化基于云的工业物联网解决方案的实施 Azure Industrial IoT Platform或AWS IoT SiteWise支持标准协议和接口 例如OPC UA或M
  • git 代码上传

    1 启动git bash 2 cd 进入代码存放的本地路径 3 初始化本地仓库 git init 4 将项目的所有文件添加到仓库中 git add 5 将add的文件commit到仓库 git commit m 注释语句 6 将本地的仓库关
  • J - Good Coins

    虽然很简单 但还是记录一下 或许能给以后的题一点思路 include
  • Python---tk类

    文章目录 创建tk对象 创建标签 创建按钮 创建文本窗口 创建tk对象 在对象创建时 使用关键字参数 fred Button self fg red bg blue 创建对象后 将选项名称视为字典索引 fred fg red fred bg
  • 【每日一题】ARC137B - Count 1’s

    题目内容 原题链接 给定一个长度为 n n n 的整数数组 a a a a i