当前位置: 首页 > 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.jsqmd.com/news/1006592/

相关文章:

  • Python 高手编程系列三千三百七十八:构建自己的文档集
  • 2026年6月国内松木镜框油画布框套装定制服务商排行top5,资质与专业评测推荐 - 奔跑123
  • 如何快速部署AI模型到嵌入式设备:5大实用技巧与RKNN-Toolkit2终极指南
  • 2026温州打捞队真实记录:本地榜单TOP1,这些水域都靠他们 - 速递信息
  • Linux jbd2_journal_commit_transaction日志提交与forget链表
  • 从ImageNet-22k到ImageNet-1k:swinv2_base_window12to16_192to256.ms_in22k_ft_in1k训练策略分析
  • 2026 青岛汽车音响改装靠谱度榜首:鼎峰汇汽车音响,被低估的技术标杆 - 汽车音响改装
  • 3分钟掌握Blender建筑生成:Building Tools终极指南
  • 鸿蒙原生应用实战(五):教程、主题与项目总结 — 从开发到上线的完整回顾
  • 3种高效WebRTC流媒体架构方案对比与Metahuman-Stream部署优化指南
  • League Akari:本地化英雄联盟智能助手完整实用指南
  • Visual Syslog Server:为Windows系统打造的专业级集中日志管理解决方案
  • 2026西安钻石回收翘楚,本地赛道顶流王机构测评 - 讯息早知道
  • 别再乱用快照了!QEMU磁盘快照和检查点快照的保姆级区别与实战(Windows+Debian)
  • texture-vs-shape项目FAQ全解答:从刺激集获取到模型评估的常见问题
  • DLSS Swapper终极指南:智能游戏性能优化方案
  • 2026石家庄翡翠回收深度实测:七家机构种水色工专项横评 - 薛定谔的梨花猫
  • 2026 南宁装修公司哪家靠谱?实测十大口碑品牌汇总 - 装修新知
  • 华浙培训・浙经院高复班(下沙)电话号码给我一下 - 弱书讲升学
  • Python 高手编程系列三千三百七十六:章节结构
  • 线上虚高报价陷阱拆解,青岛六家正规回收渠道横向对比 - 讯息早知道
  • 别再手动调参了!用Keras+20 Newsgroups数据集5步搞定文本聚类(附完整代码)
  • 2026年浙江AI搜索优化源头厂家深度评测与选型指南 - 品牌报告
  • Aider
  • 2026 年 6 月深圳卫生间阳台屋顶漏水修缮测评 本地三家防水工艺材料质保全方位对比 - 吉修匠
  • OpenHarmony 中 GN 的工作机制 — 总览
  • Java毕设项目:基于 Java 的校园二手资源循环置换系统开发研究 校园二手物品智能置换管理系统 (源码+文档,讲解、调试运行,定制等)
  • Kazumi:3个核心技巧打造流畅弹幕视频体验,彻底告别卡顿与发热
  • 去除水印工具推荐:软件小程序都好用的去水印神器 - 工具软件使用方法推荐
  • 电气 / 机械工程师必备:工程数学计算软件 Mathcad Prime 入门介绍