Link

题目描述

给定一个长度为 \(n\) 的数列 \({a_1,a_2,\cdots,a_n}\),每次可以选择一个区间 \([l,r]\),使这个区间内的数都加 \(1\) 或者都减 \(1\)。

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

输入格式

第一行一个正整数 \(n\)

接下来 \(n\) 行,每行一个整数,第 \(i+1\) 行的整数表示 \(a_i\)​。

输出格式

第一行输出最少操作次数

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

输入输出样例

输入 #1

  1. 4
  2. 1
  3. 1
  4. 2
  5. 2

输出 #1

  1. 1
  2. 2

说明/提示

对于 100% 的数据,\(1n\le 100000, 0 \le a_i \le 2^{31}\)。

差分的水题。

首先对于第一问的话,我们可以对原序列差分一下,然后我们两种区间操作就变成了,一个值加一,一个值减一。

我们要让操作次数尽可能的小,所以每次要尽量的把一个正数和负数凑在一起进行操作。

设所有差分数组正数的和 \(a\),负数的和为 \(b\),那么我们的最小操作次数就是 \(max(-a,b)\)

对于第二问的话,我们进行了 \(min(-a,b)\) 次操作之后,肯定只会剩下一个负数或者正数 \(x\),剩下的数就全为零。

我们剩下的几次操作就只能对 \(a_1,x\) 或者 \(x,a_{n+1}\) 进行操作。

然后对 \(a_1\) 进行 \(0,1,2,3,4...x\) 操作所得到的答案也是不同,所以第二问的答案为 \(abs(-a-b)+1\)

Code

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. using namespace std;
  5. #define int long long
  6. int n,sum1,sum2,ans;
  7. int a[100010],d[100010];
  8. inline int read()
  9. {
  10. int s = 0,w = 1; char ch = getchar();
  11. while(ch < '0' || ch > '9'){if(ch == '-') w = -1; ch = getchar();}
  12. while(ch >= '0' && ch <= '9'){s = s * 10 + ch - '0'; ch = getchar();}
  13. return s * w;
  14. }
  15. signed main()
  16. {
  17. n = read();
  18. for(int i = 1; i <= n; i++) a[i] = read();
  19. for(int i = 1; i <= n; i++)
  20. {
  21. d[i] = a[i] - a[i-1];
  22. }
  23. for(int i = 2; i <= n; i++)
  24. {
  25. if(d[i] < 0) sum1 += d[i];
  26. if(d[i] > 0) sum2 += d[i];
  27. }
  28. ans = max(abs(sum1),sum2);
  29. printf("%lld\n",ans);
  30. printf("%lld\n",abs(-sum1-sum2)+1);
  31. return 0;
  32. }

P4552 [Poetize6] IncDec Sequence的更多相关文章

  1. 洛谷 P4552 [Poetize6] IncDec Sequence【差分+脑洞】

    一看区间操作,很容易想到差分 所以就是先差分,然后为了保证最小步数,把政府差分抵消,也就相当于原数组区间加减 第二问,因为差分数组抵消之后不为0就需要使用n+1的虚拟位置,而这个的值其实没有,所以我们 ...

  2. Poetize6: IncDec Sequence

    3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 233  Solved: 132[Submit][Statu ...

  3. 解题:Poetize6 IncDec Sequence

    题面 差分原数列得到差分数组$dif$,这样对于$dif[2]->dif[n]$会多出来两个“空位置”$1$和$n+1$.然后区间加减就变成了使一个位置$+1$,另一个位置$-1$(可以对“空位 ...

  4. Luogu 4552 [Poetize6] IncDec Sequence

    在BZOJ上好像被权限掉了. 考虑差分,定义差分数组$b$ $$b_i = \left\{\begin{matrix} a_i \ \ \ (i == 1)\\ a_i - a_{i - 1}\ \ ...

  5. 【洛谷P4552】IncDec Sequence

    题目大意:给定一个长度为 N 的序列,现可以进行若干次区间 +1 或区间 -1 操作,求使得序列所有的值均相同的最小操作数是多少,且最终得到的序列有多少种. 题解: 首先考虑执行区间+和区间-操作,可 ...

  6. BZOJ 3043 [Poetize6] IncDec Sequence

    题目描述 给定一个长度为n的数列$a_1,a_2,--,a_n$​,每次可以选择一个区间[l,r],使这个区间内的数都加1或者都减1. 请问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最 ...

  7. 【BZOJ 3043】 3043: IncDec Sequence (差分)

    3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 589  Solved: 332 Description 给 ...

  8. BZOJ 3043: IncDec Sequence

    3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 578  Solved: 325[Submit][Statu ...

  9. bzoj 3043: IncDec Sequence 模拟

    3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 248  Solved: 139[Submit][Statu ...

随机推荐

  1. 10行Python代码自动清理电脑内重复文件,解放双手!

    大家好,又到了Python办公自动化系列. 今天分享一个系统层面的自动化案例: 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做 ...

  2. unity5打包机制下,一种资源打ab和资源管理的方案

    unity5打包机制下,一种资源打ab和资源管理的方案.1.打ab: 1.设置平台 2.清楚所有资源的assetbundlename: string[] abNameArr = AssetDataba ...

  3. 反射机制(Java)

    反射机制 今天闲来无事,对反射机制http://www.cnblogs.com/jqyp/archive/2012/03/29/2423112.html阅读一番,整理了下这方面的知识以及自己的一些心得 ...

  4. Vue事件绑定原理

    Vue事件绑定原理 Vue中通过v-on或其语法糖@指令来给元素绑定事件并且提供了事件修饰符,基本流程是进行模板编译生成AST,生成render函数后并执行得到VNode,VNode生成真实DOM节点 ...

  5. OpenvSwitch系列之八 vxlan隧道

    Open vSwitch系列之一 Open vSwitch诞生 Open vSwitch系列之二 安装指定版本ovs Open vSwitch系列之三 ovs-vsctl命令使用 Open vSwit ...

  6. 20190925-05Redis五大数据类型之String 000 026

  7. 转载:MySQL万字总结篇

    转载自:https://database.51cto.com/art/202001/609409.htm 开局一张图 这张图是重点!!!咱要先对 MySQL 有一个宏观的了解,知道他的执行流程. 一条 ...

  8. Python基础 读取二进制文件

    问题 有二进制文件中保存了 20 亿个 2 Bytes 的数,需将其读出,每 20000 个数作图,拟合后输出结果. 解决 # -*- coding: utf-8 -*- ""&q ...

  9. FFmpeg开发笔记(四):ffmpeg解码的基本流程详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  10. 实践案例丨基于 Raft 协议的分布式数据库系统应用

    摘要:简单介绍Raft协议的原理.以及存储节点(Pinetree)如何应用 Raft实现复制的一些工程实践经验. 1.引言 在华为分布式数据库的工程实践过程中,我们实现了一个计算存储分离. 底层存储基 ...