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

100. 增减序列

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

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

输入格式

第一行输入正整数 n。

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

输出格式

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

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

数据范围

0<n≤105
0≤ai<2147483648

输入样例:

4
1
1
2
2

输出样例:

1
2

 

差分解决一段区域同时增加或减少的问题
给区间【L,R】上都加上一个常数c,则b[L] += c , b[R + 1] -=c

求出a的差分序列b,其中b1 = a1,b(i) = a(i) - a(i - 1) (2 <= i <= n)。令b(n + 1) = 0,题目对序列a的操作,相当于每次可以选出b1,b2…b(n + 1)中的任意两个数,一个加1,另外一个减一。目标是把b2,b3,…bn变为全0。最终得到的数列a就是由 n 个 b1 构成的

任选两个数的方法可分为四类
1、2 <= i , j <=n(优先)
2、i = 1, 2 <=j <=n
3、2 <= i <= n , j = n + 1
4、i = 1, j = n + 1(没有意义)

设b2,b3....bn中正数总和为p,负数总和的绝对值为q。首先以正负数匹配的方式尽量执行1类操作,可执行min(p,q)次。剩余|p - q|个为匹对,每个可以选与b1或b(n + 1)匹配,即执行2 或 3 类操作,共需|p - q|次

综上所诉,最少操作次数为min(p,q) + |p - q|。根据|p - q|次第2、3类操作的选择情况,能产生|p - q| + 1中不同的b1的值,即最终得到的序列a可能有|p - q| + 1 种

 

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
using namespace std;constexpr int N=1e5+7;
typedef long long ll;
ll n,a[N],b[N];
int main(){scanf("%lld",&n);for(int i=1;i<=n;i++){scanf("%lld",&a[i]);b[i]=a[i]-a[i-1];}ll zheng=0, fu=0;for(int i=2;i<=n;i++) {if (b[i] > 0) {zheng += b[i];}else if (b[i] < 0) {fu -= b[i];}}ll ans1= max(zheng ,fu);ll ans2= abs(zheng-fu)+1;printf("%lld\n", ans1);printf("%lld\n", ans2);return 0;
}

 

 

http://www.lryc.cn/news/40190.html

相关文章:

  • 操作系统之进程的初步认识(1)
  • 【Java】你真的懂封装吗?一文读懂封装-----建议收藏
  • 使用MobaXterm ssh远程登录Ubuntu 20.04
  • 蓝桥杯历年真题训练
  • Spring事务报错: org.springframework.transaction.UnexpectedRollbackException
  • Spring:IOC和AOP
  • 【笔记】效率之门——Python中的函数式编程技巧
  • Java【多线程基础2】 Thread类 及其常用方法
  • JVM调优实战及常量池详解
  • ChatGPT研究分析:GPT-4做了什么
  • 我为什么要写博客,写博客的意义是什么??
  • ssm框架之spring:浅聊AOP
  • k8s详解
  • 计算机操作系统(第四版)第一章操作系统引论 1.1操作系统的目标和作用
  • git push解决办法: ! [remote rejected] master -> master (pre-receive hook declined)
  • jQuery 遍历方法总结
  • OKHttp 源码解析(二)拦截器
  • 如何修改设置浏览器内核模式
  • 30个Python常用小技巧
  • ubuntu解决中文乱码
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题——MYSQL安全测试解析(详细)
  • C++ map和unordered_map的区别
  • BCSP-玄子JAVA开发之JAVA数据库编程CH-04_SQL高级(二)
  • 学习java——②面向对象的三大特征
  • 初阶数据结构 - 【单链表】
  • 第五周作业、第一次作业(1.5个小时)、练习一
  • 【正点原子FPGA连载】 第三十三章基于lwip的tftp server实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南
  • 蓝桥冲刺31天之316
  • 说一个通俗易懂的PLC工程师岗位要求
  • 今年还能学java么?