1919C. Grouping Increases

news/2024/12/27 23:26:43/

问题描述

序列 X X X,划分成两个字序列 A , B A,B A,B,其中惩罚是 A , B A,B A,B之中, A [ i ] < A [ i + 1 ] , B [ i ] < B [ i + 1 ] A[i] < A[i+1], B[i] < B[i+1] A[i]<A[i+1],B[i]<B[i+1]的个数

思路

  1. 拆分 X X X,实际上是个在线的过程,不断的从 X X X中拿数字往 A , B A,B A,B之中填。

  2. 我们假设 A , B A,B A,B的最后一个数字为 A l , B l A_l,B_l Al,Bl, 针对元素 X [ i ] X[i] X[i]的插入,下列三种情况进行不同的讨论,不失一般性,我们假设 A l < = B l A_l <= B_l Al<=Bl
    情况1: X [ i ] < = A l X[i] <= A_l X[i]<=Al
    X [ i ] X[i] X[i] A A A里,因为 B l B_l Bl可接受的范围一定更广泛

    情况2: X [ i ] > B l X[i] > B_l X[i]>Bl
    X [ i ] X[i] X[i] A A A里,因为添加到 B B B的末尾,会损失一个大一点的数字

    情况3: A l < X [ i ] < = B l A_l < X[i] <= B_l Al<X[i]<=Bl
    X [ i ] X[i] X[i] B B B里,不论到A和B得会到一个负分,该决策优于添加到A,这个在文末证明。

代码

void solve()
{int n;cin >> n;vector<int> v(n + 1);for (int i = 1; i <= n; i++){cin >> v[i];}int a, b;a = b = INT_MAX;int penalty = 0;for (int i = 1; i <= n; i++){if (a > b) // a <= b{swap(a, b);}if (v[i] <= a){a = v[i];}else if (v[i] <= b){b = v[i];}else{penalty++;a = v[i];}}cout << penalty << "\n";
}

证明

情况3我们可以比较两种决策,
决策1:插入A
决策2:插入B

决策2的收益来的比较短,比如下面这种场景
A : [ 3 ] A:[3] A:[3]
B : [ 8 ] B:[8] B:[8]
X [ i ] = 5 X[i] = 5 X[i]=5

A : [ 3 ] A:[3] A:[3]
B : [ 8 , 5 ] B:[8, 5] B:[8,5]

如果我们下一个数字 X [ i + 1 ] X[i+1] X[i+1]为7,就得到1点负面收益
A : [ 3 , 7 ] A:[3, 7] A:[3,7]
B : [ 8 , 5 ] B:[8, 5] B:[8,5]


决策1的收益在与后期,比如:

A : [ 3 ] A:[3] A:[3]
B : [ 8 ] B:[8] B:[8]
X [ i ] = 5 X[i] = 5 X[i]=5

A : [ 3 , 5 ] A:[3, 5] A:[3,5]
B : [ 8 ] B:[8] B:[8]

如果我们下一个数字 X [ i + 1 ] X[i+1] X[i+1]为7,那么我们决策1就会得到收益
A : [ 3 , 5 ] A:[3,5] A:[3,5]
B : [ 8 , 7 ] B:[8, 7] B:[8,7]

但是如果我们下个数字大于8, 或者小于等于5,我们决策2和决策1会等价,并且决策2会少一点penalty。

比较上面情况, 决策2全方面的大于决策1

证毕

其实可以通过直觉得到结论,因为如果保留 B l B_l Bl,添加到 A A A里,由于每个数字都只受相邻影响,所以 B l B_l Bl的收最多就1。


http://www.ppmy.cn/news/1558635.html

相关文章

Go入门篇:(一)golang的安装和编辑工具安装

一、前言 最近我有幸接触到Go语言,深入了解后,发现go语言确实有很多让人惊叹的地方。作为一个有着多年Java编程经验的程序员,我深深地被它所吸引,并且决定记录下我的学习之路,以便与大家分享我的经验和感悟。 与Java不同,Go语言的语法和运行效率都非常高,特别是对于并…

使用 docker ps 查不到刚刚创建的容器

问题描述 docker创建mysql容器并实现本地目录挂载&#xff0c;虽然创建成功了&#xff0c;但是查看容器却不存在&#xff0c;删除重新创建还是同样的问题。 原因分析&#xff1a; 因为做本地目录挂载的时候在宿主机中创建了相关文件夹&#xff0c;并且还预先把数据库文件丢…

计算机伦理与职业规范1:计算的社会背景

1 第一个阶段&#xff1a;为战争而发展的计算机器 1.1 问题描述 面对全球冲突&#xff0c;一帮数学家开始致力于尽可能快地解决复杂数学问题。冲突双方都会通过无线电发送命令和战略信息&#xff0c;而这些信号也可能被敌方截获。为了防止信息泄露&#xff0c;军方会对信号进…

大数据新视界 -- Hive 临时表与视图的应用场景(下)(30 / 30)

💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的博客,正是这样一个温暖美好的所在。在这里,你们不仅能够收获既富有趣味又极为实…

windows nvm 切换node版本后,npm找不到

前言 在 windows 使用 nvm&#xff0c;管理 node 版本时&#xff0c;nvm install 14.21.3 后&#xff0c;发现在指定 node 版本的 node_modules 文件夹中没有对应的 npm 包&#xff0c;这时有两种方法解决&#xff0c;第一种配置自动下载 npm&#xff0c;第二种手动下载 npm 更…

推动开源数据生态:SeaTunnel ByConity技术沙龙精彩回顾

2024年12月15日&#xff0c;Apache SeaTunnel 和 ByConity 社区联合举办的主题为「探索数据生态协同创新」的技术沙龙在万胜广场C塔圆满落幕。 本次活动吸引了超过50位开发者、数据工程师和企业用户参与&#xff0c;技术交流氛围热烈&#xff0c;共同探讨了数据集成与仓库优化的…

重温设计模式--8、命令模式

文章目录 命令模式的详细介绍C 代码示例C代码示例2 命令模式的详细介绍 定义与概念 命令模式属于行为型设计模式&#xff0c;它旨在将一个请求封装成一个对象&#xff0c;从而让你可以用不同的请求对客户端进行参数化&#xff0c;将请求的发送者和接收者解耦&#xff0c;并且能…

PHP后执行php.exe -v命令报错并给出解决方案

文章目录 一、执行php.exe -v命令报错解决方案 一、执行php.exe -v命令报错 -PHP Warning: ‘C:\windows\SYSTEM32\VCRUNTIME140.dll’ 14.38 is not compatible with this PHP build linked with 14.41 in Unknown on line 0 解决方案 当使用PHP8.4.1时遇到VCRUNTIME140.dll…