news 2026/8/11 16:05:31

小红的数组操作【牛客tracker 每日一题】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
小红的数组操作【牛客tracker 每日一题】

小红的数组操作

时间限制:1 秒
空间限制:1024 MB


网页链接

牛客tracker

牛客tracker & 每日一题,完成每日打卡,即可获得牛币。获得相应数量的牛币,能在【牛币兑换中心】,换取相应奖品!助力每日有题做,丰盈牛币日益多!

题目描述

小红拿到了一个长度为n nn的数组a 1 , a 2 , … , a n a_1, a_2, \dots, a_na1,a2,,an,初始所有元素都是黑色。她可以进行以下两种操作,每种操作最多进行一次

小红希望最终数组中不包含任意相同的黑色元素,请你帮小红求出所需要的最小代价。


输入描述

第一行输入一个整数n ( 1 ≤ n ≤ 3 × 10 5 ) n\ (1 \le n \le 3 \times 10^5)n(1n3×105),代表数组的大小。

第二行输入n nn个整数a 1 , a 2 , … , a n ( 1 ≤ a i ≤ 10 9 ) a_1, a_2, \dots, a_n\ (1 \le a_i \le 10^9)a1,a2,,an(1ai109),代表数组的元素。


输出描述

输出一个整数,代表小红所需要的最小代价。


示例

示例 1

输入:

5 1 2 3 2 1

输出:

4

说明:
在这个样例中,其中一种合法的操作方法是:选择下标4 44执行第二种操作,花费2 × 2 = 4 2 \times 2 = 42×2=4的代价,后两个数字被染红,数组变为{ 1 , 2 , 3 , 2 , 1 } \{1,2,3,\color{red}{2,1}\}{1,2,3,2,1},所有黑色元素互不相同。


数据范围与提示

解题思路

本题要求通过最多一次前缀染色和最多一次后缀染色,使得剩余黑色元素互不相同,求最小总代价。核心在于利用双指针找出所有可能的无重复元素子段(即黑色保留段),并预处理前后缀的最小操作代价,枚举该段即可得到全局最优解。

1. 问题等价转化
2. 预处理最小代价数组
3. 滑动窗口枚举黑色保留段
4. 复杂度分析

总结

将问题抽象为“中间保留一个无重复子段,两边用最优前缀/后缀操作覆盖”,通过预处理任意前后缀的最小覆盖代价,结合滑动窗口枚举所有合法黑色子段,即可在线性时间内求出最小总代价。

代码简要说明

  1. 输入与预处理
    • 读入数组a aa
    • 构建pre数组:pre[i] = a[i] * (i+1),再从n − 1 n-1n10 00min,使pre[i]成为覆盖[ 0 , i − 1 ] [0, i-1][0,i1]的最小代价。
    • 构建suf数组:suf[i] = a[i] * (n-i),再从1 11n − 1 n-1n1min,使suf[i]成为覆盖[ i , n − 1 ] [i, n-1][i,n1]的最小代价。边界suf[n]视为0 00(代码中用suf[i+1])。
  2. 滑动窗口
    • 初始化左指针l = 0 l=0l=0,集合st,答案res = INF
    • 遍历右指针i ii:若a[i]重复则右移l ll并删除a[l];插入a[i];用pre[l] + suf[i+1]更新答案。
  3. 输出:输出res

代码内容

#include<bits/stdc++.h>usingnamespacestd;#defineendl'\n'typedeflonglongll;typedefunsignedlonglongull;typedefvector<vector<ll>>vvt;typedefpair<ll,ll>pll;constll N=1e3+10;constll INF=1e18;constll M=1e6+10;constll mod=1e9+7;intmain(){ios::sync_with_stdio(0);cin.tie(0),cout.tie(0);ll n;cin>>n;vector<ll>a(n);for(auto&x:a)cin>>x;vector<ll>pre(n+1),suf(n+1);for(ll i=0;i<n;i++){pre[i+1]=a[i]*(i+1);suf[i]=a[i]*(n-i);}for(ll i=n-1;i>0;i--)pre[i]=min(pre[i],pre[i+1]);for(ll i=1;i<n;i++)suf[i]=min(suf[i],suf[i-1]);set<ll>st;ll res=INF;ll l=0;for(ll i=0;i<n;i++){while(st.count(a[i])){st.erase(a[l]);l++;}st.insert(a[i]);res=min(res,pre[l]+suf[i+1]);}cout<<res<<endl;return0;}
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/11 16:02:31

【单片机课程设计/毕业设计】基于 51 单片机的声光报警式农田小型环境智能管控系统 基于 STM32 的多传感器植物生长环境自动调节装置设计(017702)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/11 16:00:36

长沙燃气灶维修全域覆盖 欧米到家同城上门深度检修承诺不返工|打不着火|松手熄火|黄火冒黑烟|漏气|各类故障一站式解决

导读长沙燃气灶出现打不着火、点火后松手熄火、火焰发黄、冒黑烟、燃烧不均、旋钮失灵或疑似漏气等问题&#xff0c;可联系欧米到家统一报修热线400-996-9791。平台根据所在区域安排同城维修师傅上门&#xff0c;先检测故障原因&#xff0c;再说明维修方案和费用&#xff0c;确…

作者头像 李华
网站建设 2026/8/11 16:00:28

Flink 1.20单机部署指南:Docker环境配置与实战

1. Flink 1.20单机部署环境准备 1.1 系统环境要求 在开始部署前&#xff0c;需要确保你的系统满足以下基本要求&#xff1a; 操作系统&#xff1a;Linux&#xff08;推荐Ubuntu 20.04或CentOS 7&#xff09;或macOS Docker版本&#xff1a;20.10.0及以上 内存&#xff1a;至…

作者头像 李华
网站建设 2026/8/11 15:55:48

从 Word 复制粘贴到模板复用,合同起草效率翻一倍

行政和法务最熟悉的一个画面&#xff1a;要发一份新合同&#xff0c;先打开上次的 Word&#xff0c;全选、改名字、改金额、改日期&#xff0c;生怕哪里漏改。这种"复制粘贴式起草"用了很多年&#xff0c;但慢、易错、版本乱&#xff0c;几乎是它的标配。对一个月要处…

作者头像 李华
网站建设 2026/8/11 15:52:54

泉州燃气灶维修全域覆盖 欧米到家同城上门深度检修承诺不返工|打不着火|松手熄火|黄火冒黑烟|漏气|各类故障一站式解决

导读 泉州燃气灶出现打不着火、点火后松手熄火、火焰发黄、冒黑烟、燃烧不均、旋钮失灵或疑似漏气等问题&#xff0c;可联系欧米到家统一报修热线400-996-9791。平台根据所在区域安排同城维修师傅上门&#xff0c;先检测故障原因&#xff0c;再说明维修方案和费用&#xff0c;…

作者头像 李华