【算法】增减序列(贪心,差分)

news2024/11/18 11:24:39

题目

给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一。

求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种。

输入格式

第一行输入正整数 n。

接下来 n 行,每行输入一个整数,第 i+1 行的整数代表 ai。

输出格式

第一行输出最少操作次数。

第二行输出最终能得到多少种结果。

数据范围

0 < n ≤ 1e5
0 ≤ ai < 2147483648

输入样例:

4
1
1
2
2

输出样例:

1
2

思路

假设我们有一个序列:9 8 7 10 11 12 4 5 ,第一步我们先求出差分数组,然后使得差分数组的值为0(第一位不需要变)

 sum1 = abs(所有负数之和)

sum2  = 所有正数之和 

sum1 与 sum2 均与差分数组第一位无关 

将差分数组除第一位全部变为0需要操作 max(sum1,sum2)次

差分数组的第一位的取值个数ans = max(sum1,sum2) - min(sum1,sum2) + 1;

代码 

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 10;
int n;
int a[N],b[N];
int p,q;

int32_t main()
{
    cin >> n;
    for(int i = 1; i <= n; i ++) cin >> a[i];
    for(int i = 1; i <= n; i ++) b[i] = a[i] - a[i - 1];
    for(int i = 2; i <= n; i ++)
    {
        if(b[i] > 0) p += b[i];
        else q -= b[i];
    }
    cout << max(p,q) << endl;
    cout << abs(p - q) + 1 << endl;
    return 0;
}

题目来自: 100. 增减序列 - AcWing题库

难度:中等
时/空限制:1s / 64MB
总通过数:16399
总尝试数:35129
来源:《算法竞赛进阶指南》
算法标签

题目来自:100. 增减序列 - AcWing题库

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

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

相关文章

如何下载 DEM数字高程数据(SRTM和COPERNICUS)

数字高程模型&#xff08;Digital Elevation Model&#xff0c;DEM&#xff09;是地球表面的数字表示&#xff0c;以地形高程信息的形式存在。DEM通常以栅格或点云的形式存在&#xff0c;其中每个单元&#xff08;栅格或点&#xff09;都具有对应的高程数值。DEM可以使用各种技…

MYSQL篇--锁机制高频面试题

Mysql锁机制 1对mysql的锁有了解吗&#xff1f; 首先我们要知道&#xff0c;mysql的锁 其实是为了解决在并发事务时所导致的数据不一致问题的一种处理机制&#xff0c;也就是说 在事务的隔离级别实现中&#xff0c;就需要利用锁来解决幻读问题 然后我们可以聊到锁的分类 按锁…

Windows安装和使用kafka

一、安装kafka 由于kafka依赖jdk和zookeeper&#xff0c;安装kafka之前需要先安装jdk和zookeeper&#xff0c;也可以使用kafka自带的zookeeper。安装jdk可以参考&#xff1a;Windows和Linux安装jdk&#xff0c;此处使用kafka自带的zookeeper&#xff0c;不单独安装。 下面在Wi…

Python列表(list)

目录 列表列表的创建与删除访问列表元素index() 方法 列表的遍历添加&#xff0c;修改和删除列表元素添加修改删除 对列表统计和计算count() 方法如需确定列表中有**多少元素**&#xff0c;请使用 len() 方法&#xff1a;检查项目是否存在**复制列表****合并两个列表****list()…

Win10安装配置Redis,修改密码

一、下载Redis tporadowski 提供了 支持 Windows平台的 Redis 安装包&#xff0c;目前仍在维护&#xff0c;目前最新版本是 5.0.14&#xff0c;更新速度跟Redis官网也相差好几个大版本。 下载地址&#xff1a;https://github.com/tporadowski/redis/releases 二、Redis 安装 …

极客时间-如何降低用户鉴权的流量压力

背景 内容是极客时间-徐长龙老师的高并发系统实战课的个人学习笔记&#xff0c;欢迎大家学习&#xff01;https://time.geekbang.org/column/article/596644 使用Session方式实现用户的用户鉴权 优点 信息都在服务端储存&#xff0c;对客户端不暴露任何用户敏感的数据信息 缺…

SQL-修改表操作

目录 DDL-表操作-修改 添加字段 &#xff08;方括号内容可选&#xff09; 修改字段 修改指定字段的数据类型 修改字段名和字段类型 删除字段 修改表名 删除表 删除指定表&#xff0c;并重新创建该表 总结 &#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦…

Window平台安装MongoDB

在部署前需要在官网先确定系统对应的Mongo DB版本。 本机电脑为Window10&#xff0c;所以这里以MongoDB 6.0版本。 1 在官网下载安装包 2 安装MongoDB MongoDB Compass 是一个图形界面管理工具&#xff0c;如果勾选了安装会花费长一点时间&#xff0c;可以取消掉勾选&#xff…

[UI5] ODATA V4中的CRUD

文章目录 前言一、Read二、Create三、Update四、Delete 前言 ODATA V4在CRUD方面与V2截然不同。 这篇文章简单介绍V4中是如何进行CRUD操作 一、Read Model不再有read方法&#xff0c; 一般是把Path绑定到View中进行读取&#xff0c; 如果需要额外的读取数据&#xff0c;可使用…

树状结构查询 - 华为OD统一考试

OD统一考试 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 通常使用多行的节点、父节点表示一棵树&#xff0c;比如&#xff1a; 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后&#xff0c;请打印出来树中他的所有下层节点。 …

Python: Spire.PDF-for-Python

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看&#xff1a; # 描述&#xff1a; # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # Datetime : 2024/1/11 10:32 # User : geovindu # Product : PyChar…

TypeScript类型挑战:实现内置的Omit实用类型

掌握 TypeScript Omit 泛型&#xff0c;一起完成 Type 挑战&#xff0c;巩固 TypeScript 知识。 为了帮助读者更好地巩固 TypeScript 的知识&#xff0c;我从 Github 上的 type-challenges 库中选择了几十个挑战&#xff0c;与您一起完成类型挑战。 挑战 实现内置的 Omit&…

分布式系统架构设计之分布式消息队列的水平扩展性、安全可用性以及监控与调优

一、分布式消息队列的水平扩展 随着业务的快速发展和数据的不断增长&#xff0c;单一的消息队列服务器往往难以满足高并发、高可用和高吞吐量的需求&#xff0c;因此&#xff0c;如何实现消息队列的水平扩展成为了一个重要的问题。这部分我将从分区、副本、负载均衡等关键概念…

影响eCPM的因素有哪些?如何提升eCPM?

eCPM&#xff08;千次展示有效收益&#xff09;直接关系广告变现收益的高低&#xff0c;是开发者们最关心的数据之一。要想优化提升eCPM&#xff0c;首先要了解哪些主要因素影响eCPM&#xff0c;再针对性优化广告库存&#xff0c;提高变现收益。 https://www.shenshiads.com …

线性回归实例

1、线性回归&#xff08;linear Regression&#xff09;和逻辑回归&#xff08;logistic Regression&#xff09;的区别 线性回归主要是用来拟合数据&#xff0c;逻辑回归主要是用来区分数据&#xff0c;找到决策边界。 线性回归的代价函数常用平方误差函数&#xff0c;逻辑回…

java每日一题——打印100以内个位和十位相同,尾数为1,3,5,7的数字

前言&#xff1a; 打好基础&#xff0c;daydayup! 题目&#xff1a;打印100以内个位和十位相同&#xff0c;尾数为1,3,5,7的数字 思路&#xff1a;1&#xff0c;个位通过对10求余数可求出1&#xff0c;3&#xff0c;5&#xff0c;7&#xff1b; 2&#xff0c;十位可通过先除10…

【Unity】【Pico】【VR开发】为何PICO打包后真机运行闪退

【背景】 设置步骤&#xff0c;项目配置都没问题&#xff0c;Build也成功&#xff0c;Unity版本是符合要求的2022LTS版本&#xff0c;但是一在真机上运行就闪退。 【分析】 由于并没有开版权验证&#xff0c;而且闪退后也并没有弹框说版权问题&#xff0c;所以还是怀疑环境有…

软件测试|Python成员运算符:使用方法与元素检查

简介 Python是一种功能强大的编程语言&#xff0c;提供了许多方便的工具来处理数据和集合。其中之一就是成员运算符&#xff0c;它允许我们在集合中检查特定元素的存在。在本文中&#xff0c;我们将深入探讨Python中的成员运算符&#xff0c;以及如何使用它来进行元素检查。 …

pyside6 捕捉主窗口关闭后,进行释放相关的资源

import sys from PySide6 import QtGui from PySide6.QtWidgets import QWidget,QApplication,QMessageBoxclass Message(QWidget):def __init__(self):# 如果希望窗口内嵌于其他部件&#xff0c;可添加parent参数super(Message, self).__init__()# 调用初始化方法self.initUI(…

使用Sqoop将数据导入Hadoop的详细教程

在大数据处理中&#xff0c;Sqoop是一个强大的工具&#xff0c;它可以将关系型数据库中的数据导入到Hadoop生态系统中&#xff0c;以便进行进一步的分析和处理。本文将提供一个详细的教程&#xff0c;以帮助大家了解如何使用Sqoop将数据导入Hadoop。 准备工作 在开始之前&…