Grouping Increases

您将得到一个大小为 n 的数组 a。您将执行以下过程来计算惩罚:将数组 a 拆分为两个子序列 s 和 t(可能为空),使 a 的每个元素都在 s 或 t 中。
对于大小为 m 的数组 b,将数组 b 的惩罚  p(b) 定义为介于 1 和 m−1 之间的索引 i 的数量,其中 bi< bi+1。
您将收到的总罚款为 p(s)+p(t).
如果您以最佳方式执行上述过程,请找出您将收到的可能的最低处罚。
注意,将数组 a=[3,1,4,1,5] 拆分为 (s,t)的一些有效方法是 ([3,4,1,5],[1])、([1,1],[3,4,5])和([],[3,1,4,1,5]),而将数组a拆分为([3,4,5],[1])、([3,1,4,1],[1,5])、([1,3,4,1],[1,5])和([1,3,4],[5,1])的一些无效方法。

输入
每个测试包含多个测试用例。第一行包含一个整数t(1 ≤ t ≤ 1e4)——测试用例的数量。测试用例的描述如下。
每个测试用例的第一行包含一个整数 n(1 ≤ n ≤ 2e5)——数组a的大小。
第二行包含n个整数 a1,a2,…,an(1 ≤ ai ≤ n)——数组a的元素。
保证所有测试用例的 n 之和不超过 2e5。

输出
对于每个测试用例,输出一个整数,表示您将收到的可能的最小惩罚。

Input
5
5
1 2 3 4 5
8
8 2 3 1 1 7 4 3
5
3 3 3 3 3
1
1
2
2 1

Output
3
1
0
0
0

注:
在第一个测试用例中,拆分a的一种可能方法是 s=[2,4,5] 和 t=[1,3]。惩罚为 p(s)+p(t)=2+1=3。
在第二个测试用例中,拆分a的一种可能方法是 s=[8,3,1] 和 t=[2,1,7,4,3]。惩罚为 p(s)+p(t)=0+1=1。
在第三个测试用例中,拆分a的一种可能方式是 s=[] 和 t=[3,3,3,3,3]。惩罚为 p(s)+p(t)=0+0=0。

解析:

我们建立两个空数组 b和 c,之后将 a数组中的元素一个接一个插入 b和c,使得 a 中相邻 ai<ai+1 的个数减少。
惩罚函数只取决于相邻元素,所有我们只关心 b和 c的最后一个元素的值。假设我们已经将 a1,a2,…,ai−1 插入到数组 b和 c中,现在我们想要插入ai,假设 x 和 y 分别是数组 b和 c的最后一个元素。

假设 x ≤ y,
如果ai ≤ x,则将ai插入到具有较小最后一个元素的数组的后面。
如果y<ai,则将ai插入到具有较小最后一个元素的数组的后面。
如果x<ai ≤y,则将ai插入到最后一个元素较大的数组的后面。
当数组 b和c 为空时,令 x和y 无穷大。

ai ≤ x 在这种情况下,ai 不大于两个数组的最后一个元素,因此将 ai 插入任一数组的后面不会增加额外的惩罚。然而,最好将 ai 插入到最后一个元素较小的数组中,这样将来我们就可以在没有额外惩罚的情况下将更大范围的值插入到新数组中。
y<ai 在这种情况下,ai 大于两个数组的最后一个元素,因此将 ai 插入任一数组的后面将导致1个额外的惩罚。然而,最好将 ai 插入到最后一个元素较小的数组中,这样将来我们就可以在没有额外惩罚的情况下将更大范围的值插入到新数组中。
x< ai ≤y 在这种情况下,如果我们将ai插入到最后一个元素较大的数组的后面,则不会有任何额外的惩罚。然而,如果我们将 ai 插入到最后一个元素较小的数组的后面,则会有 1 的额外惩罚。前者总是比后者好。这是因为,如果我们考虑在两种情况下对其余元素 ai+1 到 an 做出相同的选择,则最多会有一次,前一种情况会比后一种情况多增加一个惩罚,因为前一种场景在插入 ai 后的最后一个元素较小。在这之后,两种情况下的阵列背面将变得相同,因此,前一种情况永远不会不那么优化。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair<int,int> PII;
const double PI=acos(-1.0);
const int N=2e6+10;
int t,n;
int a[N];
int s[N],p[N];
signed main()
{ios;cin>>t;while (t--){cin>>n;for (int i=1;i<=n;i++) cin>>a[i];int l=0,r=0;s[l]=2e9,p[r]=2e9;for (int i=1;i<=n;i++){int x=a[i];if (s[l]<p[r]){if (s[l]>=x||p[r]<x) s[++l]=x;else p[++r]=x;}else {if (p[r]>=x||s[l]<x) p[++r]=x;else s[++l]=x;}}int cnt=0;for (int i=1;i<l;i++){if (s[i]<s[i+1]) cnt++;}for (int i=1;i<r;i++){if (p[i]<p[i+1]) cnt++;}cout<<cnt<<endl;}return 0;
}//精简版 
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair<int,int> PII;
const double PI=acos(-1.0);
const int N=2e6+10;
int t,n;
int a[N];
signed main()
{ios;cin>>t;while (t--){cin>>n;for (int i=1;i<=n;i++) cin>>a[i];int l=2e9,r=2e9;int cnt=0;for (int i=1;i<=n;i++){int x=a[i];if (l>r) swap(l,r);if (x<=l) l=x;else if (r<x){l=x;cnt++;}else r=x;}cout<<cnt<<endl;}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/604437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安科瑞电力物联网系统在电力设备在线监测中的应用——安科瑞 顾烊宇

摘要&#xff1a;近年来&#xff0c;社会经济发展速度不断提升&#xff0c;对电力能源的需求大幅增加&#xff0c;为保障变电站等电力设备合理发挥功能&#xff0c;保障供电安全性和稳定性&#xff0c;应当加强对电力设备的监测和管理。而电力物联网技术是现代一种安全工器具的…

记一个React组件入参不当导致页面卡死的问题

一、问题描述 1.1 触发现象 点击按钮后页面卡死 1.2 最小 Demo CodeSandBox&#xff1a;https://codesandbox.io/p/sandbox/react-hook-component-stuck-755wcyinscode&#xff1a;https://inscode.csdn.net/ import ./App.css; import React, { useState, useEffect } f…

JVM中对象的创建

一.JVM运行流程 JVM向操作系统申请内存&#xff0c;初始化运行时数据区&#xff0c;接下来装载使用的类&#xff0c;执行类里面相应方法的时候为当前虚拟机栈压入一个栈帧&#xff0c;方法执行完成后栈帧出栈&#xff0c;进行垃圾回收。 二.JVM中对象的创建过程 符号引用&…

第03章_运算符与流程控制

第03章_运算符与流程控制 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题脉络 1. 运算符&#xff08;Operator&#xff09; 运算符是一种特殊的符号&#xff0c;用以表示数据的运算、赋…

CSS基础笔记-04cascade-specificity-inheritance

CSS基础笔记系列 《CSS基础笔记-01CSS概述》《CSS基础笔记-02动画》CSS基础笔记-03选择器 前言 Cascading Style Sheets&#xff0c;关键就在于这个cascading&#xff0c;对于这个术语理解&#xff0c;感觉对于我这种CSS新手有点儿不太friendly。本文记录下我对这个术语的理…

CoroutineScope Dispatchers.IO异步操作async返回函数,Kotlin

CoroutineScope Dispatchers.IO异步操作async返回函数&#xff0c;Kotlin import kotlinx.coroutines.*fun myFun(a: Int, b: Int, retFun: (sum: Int) -> Unit) {println("分支myFun开始... ${System.currentTimeMillis()}")val task CoroutineScope(Dispatcher…

互联网分布式应用之SpringCloud

SpringCloud Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机&#xff0c;Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. 微服务项目介绍 2. Eure…

修复 OpenCV 依赖错误的小工具:OpenCV Fixer

使用 Nvidia 官方 Docker 镜像折腾 Stable Video Diffusion 的时候&#xff0c;发现 OpenCV 社区有一个古怪的 issue 需要手动解决&#xff0c;所以顺手写了一个能够自动修复的小工具。 以及&#xff0c;聊聊如何快速的发布一个 Python 软件包。 写在前面 如果你在使用 Pyth…

kafka-zookeeper集群架构可视化监控,Kafka-Eagle安装部署

1、简介 在 kafka-zookeeper 集群架构下&#xff0c;zookeeper 管理 kafka 的元数据信息&#xff0c;如何监控这些信息&#xff0c;并且能够直观查看和管理 kafka 一些具体 主题、分区等参数信息&#xff0c;是非常便于开发的&#xff0c;因此 Kafka-Eagle 是一个为监控 kafka …

git 常用命令 rebase发生冲突时 ☞ 撤销rebase

场景&#xff1a;rebase发生冲突时 ☞ 撤销rebase git rebase --abort git reset --hard HEAD git reset --hard 8ec554Further Reading &#xff1a;Git常用命令汇总

智慧医院预约及支付平台—平台系统功能介绍

智慧医院APP(大众版) 系统概念 智慧医院APP(大众版)是面向居民大众,提供基于居民健康档案移动端的服务, 能够为居民提供全流程的医疗就诊服务支持,包括便捷的就医帮助,精确高效的健康管理服务,缓解居民的看病难、看病贵的问题。 功能清单 功能类别 功能模块 功能说…

一个奇怪的Oracle SQL Loader错误

今天在用Oracle SQL Loader导入文本文件时&#xff0c;发生了一个奇怪的问题&#xff0c;就是&#xff1a;我的输入文本文件dbim.dat放在oracle用户根目录&#xff08;$HOME&#xff09;下时&#xff0c;导入不成功&#xff1b;而将其放在/u01/app/oracle目录下时&#xff0c;则…

基于机器视觉的车牌检测-边缘检测因子的选择

车牌检测概述 车牌识别在检测报警、汽车出入登记、交通违法违章以及移动电子警察方面应用广泛。车牌识别过程为&#xff1a;首先通过摄像头获取包含车牌的彩色图像&#xff1b;然后进行车牌边缘检测&#xff0c;先粗略定位到车牌位置&#xff0c;再精细定位&#xff1b;最后根…

面试经典150题(67-71)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第三十四天&#xff09;完成了5道(67-71)150&#xff1a; 67.&#xff08;114. 二叉树展开为链表&#xff09;题目描述&#xff1a; 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#…

[AutoSar]基础部分 RTE 05 Port的实例化和初始化

目录 关键词平台说明一、端口类型二、端口的实例化2.1 创建application port2.2 实例化 三、初始化 关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C&#xff0c;C编译器HighTec (GCC) 一、端口类型 如下图所示&am…

MvvmToolkit的使用

背景&#xff1a;MvvmLight不更新了&#xff0c;用Toolkit代替 1、首先下载好社区版本的NuGet包 2、ViewModel中需要继承ObservableObject&#xff0c;查看ObservableObject可以看到里面有实现好InotifyPropertyChanged。 3、对于属性的set&#xff0c;可以简写成一行&#xff…

鸿蒙应用开发 闹钟实现

后台代理提醒简介 随着生活节奏的加快&#xff0c;我们有时会忘记一些重要的事情或日子&#xff0c;所以提醒功能必不可少。应用可能需要在指定的时刻&#xff0c;向用户发送一些业务提醒通知。例如购物类应用&#xff0c;希望在指定时间点提醒用户有优惠活动。为满足此类业务…

PTA——L2-041 插松枝(25分、模拟题)

文章目录 一、题目二、题解1.基本思路&#xff1a; 一、题目 人造松枝加工场的工人需要将各种尺寸的塑料松针插到松枝干上&#xff0c;做成大大小小的松枝。他们的工作流程&#xff08;并不&#xff09;是这样的&#xff1a; 每人手边有一只小盒子&#xff0c;初始状态为空。…

C++与数据库MySQL锁——模拟订票(事务)

假设订票的时候&#xff0c;好几个人同时进入&#xff0c;查看这张票是否售出&#xff0c;假如同时购买了这张票&#xff0c;那对于售票行业来说&#xff0c;可能就会发生低级错误。那么如何避免这类事情发生呢&#xff1f; 解决办法&#xff1a; 在一个人访问的时候&#xf…

Nginx(二十) 获取真实客户端IP

客户端在访问互联网应用服务器时&#xff0c;与真实的应用服务器之间会因为有多层反向代理&#xff0c;而导致真实应用服务器获取的仅是最近一层的反向代理服务器 IP。为使 Nginx 后端的上游服务器可以获得真实客户端 IP&#xff0c;Nginx 提供了 ngx_http_realip_module 模块用…