当前位置: 首页 > news >正文

刷CF #1900 二周目

CF1479B1 Painting the Array II

题目描述

给定一个数组 \(a\), 你将将 \(a_i\) 染为 \(b_i\) 色, 其中 \(b\) 是由你指定的一个 01 数组。将 \(a\) 数组中被染成 0 色的数字取出来并依在 \(a\) 中出现的顺序排列, 组成数组 \(a^{(0)}\). 同理, 将 \(a\) 数组中被染成 1 色的数字取出来并依在 \(a\) 中出现的顺序排列, 组成数组 \(a^{(1)}\).

我们定义 \(seg(c)\) 是一个正整数, 其中 \(c\) 是一个数组, \(seg(c)\) 的值为在我们将 \(c\) 中相邻的所有相同元素合并后, \(c\) 数组的大小. 例如, \(seg([1, 1, 4, 5, 1, 4]) = |[1, 4, 5, 1, 4]|=5\).

最大化 \(seg(a^{(0)})+seg(a^{(1)})\).

题解

贪心。显然我们维护两个队列,每次去看末尾的数与 \(a_i\) 的关系,有以下四种:

  • \(lst_1 = a_i, lst_2 \ne a_i\),此时我们显然塞进队列 \(2\)
  • \(lst_2 = a_i, lst_1 \ne a_i\),此时我们显然塞进队列 \(1\)
  • \(lst_1 = lst_2 = a_i\),此时随便找一个塞进去不会影响答案。
  • \(lst_1 \ne a_i,lst_2 \ne a_i\),此时怎么办?此时不同的放置方式虽然对当前答案无影响,但可能会影响后续答案

后续答案是怎么被影响的呢?如果某个队列,队尾元素的下一次出现位置更早,肯定把这个元素塞进去把两个相同的数隔开。至于下一次出现位置更远的,以后再说嘛。

所以只需要维护每一个数下一个相同元素的出现位置即可。

Code

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int M = 1e5 + 5;
int a[M], nxt[M], idx[M];
signed main(){int n, res = 0;cin >> n;for(int i = 1; i <= n; i++) cin >> a[i], idx[i] = n + 1;vector<pair<int, int>>vec1, vec2;for(int i = n; i >= 1; i--) {nxt[i] = idx[a[i]];idx[a[i]] = i;}vec1.push_back(make_pair(n + 1, 0));vec2.push_back(make_pair(n + 1, 0));for(int i = 1; i <= n; i++){int bk1 = vec1.back().second, bk2 = vec2.back().second;pair<int, int> ms = make_pair(nxt[i], a[i]);if(bk1 == a[i]){if(a[i] != bk2) res++;vec2.push_back(ms);}else if(bk2 == a[i]){if(a[i] != bk1) res++;vec1.push_back(ms);}else {res++;if(vec1.back().first < vec2.back().first) vec1.push_back(ms);else vec2.push_back(ms);}}cout << res;return 0;
}
http://www.gsyq.cn/news/1518384.html

相关文章:

  • 从ImageNet-22k到ImageNet-1k:swinv2_base_window12to16_192to256.ms_in22k_ft_in1k训练策略分析
  • League Akari:本地化英雄联盟智能助手完整实用指南
  • texture-vs-shape项目FAQ全解答:从刺激集获取到模型评估的常见问题
  • 2026年浙江AI搜索优化源头厂家深度评测与选型指南 - 品牌报告
  • Python 高手编程系列三千三百七十六:章节结构
  • Kazumi:3个核心技巧打造流畅弹幕视频体验,彻底告别卡顿与发热
  • 电气 / 机械工程师必备:工程数学计算软件 Mathcad Prime 入门介绍
  • Adobe CC 2019-2023通用权限管理工具终极指南:三步配置完整方法
  • 从加法器到ALU:手把手教你用Verilog HDL搭建一个简易CPU核心模块
  • 基于双SI4463芯片的 AIS 接收机开发
  • 全网最全!二分查找的两种核心模板详解
  • M68000处理器指令集与寻址模式:CISC架构的经典设计解析
  • 工业大模型应用指南:小白程序员必备,收藏学习助你起飞!
  • Umi-OCR终极指南:3分钟掌握免费开源的离线OCR工具,开启高效文字识别新时代
  • 3步解锁微信聊天记录永久保存:WeChatMsg让珍贵对话永不丢失
  • Basalt在实际机器人项目中的应用:ROS集成与部署实践
  • 揭阳市 黄金回收合规商家及传家黄金实地测评 - 靖昱黄金回收
  • 5分钟彻底清理Mac应用残留:开源清理神器Pearcleaner终极指南
  • 2026工艺金饰估价避亏技巧,青岛五家回收商铺实地亲测分享 - 讯息早知道
  • 多核音频处理器引脚复用与系统设计实战解析
  • 2026江苏电气成套与配电系统十大品牌:汉发电气实力领跑,一站式电力工程解决方案优选 - 安互工业信息
  • Cursor Pro破解工具终极指南:3分钟实现AI编程助手永久免费使用
  • 如何一键清理Windows 11系统臃肿?Win11Debloat终极优化指南
  • zsh-async测试与质量保证:编写可靠的异步脚本
  • 别只看足金!你的18K金、铂金、旧金条都能卖钱:聊城全品类回收指南 - 润富黄金回收
  • gh_mirrors/do/dotnet-docs-samples完全指南:轻松掌握Google Cloud .NET开发的终极入门教程
  • 南山区的口才班太多了,我最后是这样选出来的 - 深圳市民HLL
  • 油莎豆加工成套设备常见问题解答(2026最新专家版) - 速递信息
  • term2048扩展指南:如何自定义游戏目标与棋盘大小
  • LING高级特性详解:如何利用Xen虚拟化优化Erlang运行时性能