BZOJ 3043 [Poetize6] IncDec Sequence
题目描述
给定一个长度为n的数列$a_1,a_2,……,a_n$,每次可以选择一个区间[l,r],使这个区间内的数都加1或者都减1。
请问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。
输入输出格式
输入格式:
第一行一个正整数n
接下来n行,每行一个整数,第i+1行的整数表示a[i]。
输出格式:
第一行输出最少操作次数
第二行输出最终能得到多少种结果
输入输出样例
4
1
1
2
2
1
2
说明
对于100%的数据,n≤100000,0≤a[i]≤2147483648。
题解:
经典差分模型。
总结对于这类模型的做法。
考虑差分的特点:
1、 反映数据之间的相对关系。
2、 前缀和和是原来的数据(废话……)
3、 原数组区间$[l,r]$加v在差分数组上变成了$dif[l]+v,dif[r+1]-v$,特别的当修改区间为$[l,n]$时,仅有$dif[l]+v$($n+1$直接忽略)
有了以上的特点我们就好分析题目了。
先考虑第一问:
要求最少操作使得数列列全部相等。如果我们将数列差分起来,那么我们要让全部数都相等,那么就是要让差分数组中每一项都为0,我们考虑要让每一项都等于多少,根据特点2,如果我们留下第一项的,只将$[2,n]$的差分数组变为0,那么数列就都是第一项的值了。所以我们只在$[2,n]$的差分序列上做操作。根据特点3,我们操作转换成了让$dif[l]+1,dif[r+1]-1$和$dif[l]-1,dif[r+1]+1$,所以我们考虑将差分数组中的正数和负数一一配对,那么最后如果剩下一些正数,那么就修改$dif[i]+1,dif[n+1]-1$就可以把正数消除,负数同理。
考虑第二问:
上面讲过,我们留下了第一项,所以数列中所有数会变成第一项的数,所以就考虑最优情况下,第一项可以有多少种取法即可。也就是考虑剩下的那些正数(或负数)和第一个位置互相抵消一部分(剩余的再和$n$抵消)的的情况,就是$dif[1]+1,dif[i]-1$
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#define N 100005
using namespace std;
int n;
long long a[N],dif[N],pos,neg;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%lld",&a[i]);
for(int i=1;i<=n;i++) dif[i]=a[i]-a[i-1];
for(int i=2;i<=n;i++){
pos+=max(dif[i],0ll);
neg-=min(dif[i],0ll);
}
printf("%lld\n",max(pos,neg));
printf("%lld\n",abs(pos-neg)+1);
return 0;
}
BZOJ 3043 [Poetize6] IncDec Sequence的更多相关文章
- Poetize6: IncDec Sequence
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 233 Solved: 132[Submit][Statu ...
- Luogu 4552 [Poetize6] IncDec Sequence
在BZOJ上好像被权限掉了. 考虑差分,定义差分数组$b$ $$b_i = \left\{\begin{matrix} a_i \ \ \ (i == 1)\\ a_i - a_{i - 1}\ \ ...
- 解题:Poetize6 IncDec Sequence
题面 差分原数列得到差分数组$dif$,这样对于$dif[2]->dif[n]$会多出来两个“空位置”$1$和$n+1$.然后区间加减就变成了使一个位置$+1$,另一个位置$-1$(可以对“空位 ...
- 洛谷 P4552 [Poetize6] IncDec Sequence【差分+脑洞】
一看区间操作,很容易想到差分 所以就是先差分,然后为了保证最小步数,把政府差分抵消,也就相当于原数组区间加减 第二问,因为差分数组抵消之后不为0就需要使用n+1的虚拟位置,而这个的值其实没有,所以我们 ...
- P4552 [Poetize6] IncDec Sequence
Link 题目描述 给定一个长度为 \(n\) 的数列 \({a_1,a_2,\cdots,a_n}\),每次可以选择一个区间 \([l,r]\),使这个区间内的数都加 \(1\) 或者都减 \(1\ ...
- 【BZOJ 3043】 3043: IncDec Sequence (差分)
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 589 Solved: 332 Description 给 ...
- BZOJ 3043: IncDec Sequence
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 578 Solved: 325[Submit][Statu ...
- bzoj 3043: IncDec Sequence 模拟
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 248 Solved: 139[Submit][Statu ...
- 前缀和与差分之IncDec sequence
参考链接:https://blog.csdn.net/hzk_cpp/article/details/80407014 题目链接:https://www.acwing.com/problem/cont ...
随机推荐
- Java正则中"\\\\"表示普通反斜杠
Java中"\"用于转义字符,"\\"表示普通无转义功能的反斜杠. 如果将字符串当做正则表达式来解析,那么"\\"也有了特殊意义,它与其后的 ...
- 什么是Sprint计划?
Sprint 计划是Scrum框架中的一个事件,团队将确定他们将在冲刺期间处理的产品积压项目,并讨论他们完成这些产品积压项目的初始计划. 团队可能会发现建立冲刺目标很有帮助,并以此为基础确定他们在冲刺 ...
- BUAA 2020 软件工程 结对项目作业
Author: 17373051 郭骏 3.28添加:4.计算模块接口的设计与实现过程部分,PairCore实现的细节 项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) ...
- Ajax配合后端实现Excel的导出
一.需求 在我们的日常开发中,可能经常需要遇到excel的导出,以往excel的导出服务器端都是使用的 GET 方法,但是某些情况下,服务器端只能使用 POST 方法,那么我们有没有好的方法实现exc ...
- Machine learning(4-Linear Regression with multiple variables )
1.Multiple features So what the form of the hypothesis should be ? For convenience, define x0=1 At t ...
- 最小最大堆min-max Heap
(1)由性质5只能插在奇数层,即根节点处,7下沉到右堆的min level,10下沉到max level,插入后满足min-max heap性质,很容易画出: (2)由性质80也是向右堆插入,且插入到 ...
- 我的笔记本电脑瞬间扩大一个T的容量!
前言 不知道有多少人在家里搭建中央存储设备的,也就是NAS.这个东西在我日常生活中,存储了大量的个人资料,家人们的照片,技术的资料,还有各种高清影视剧.搭配公网的IP,可以真正做到,任何时候任何地点的 ...
- idea离线安装lombok插件
1.查看自己idea版本,2019.1.2,必须安装相同版本的插件 2.从http://plugins.jetbrains.com/plugin/6317-lombok-plugin中下载对应版本的l ...
- 问题 Q: 最大的数
题目描述 小明和小红在打赌说自己数学学的好,于是小花就给他们出题了,考考他们谁NB,题目是这样的给你N个数 在这n个数之间添加N-1个*或+,使结果最大,但不可以打乱原顺序,请得出这个结果 如 1 3 ...
- 问题 A: 大数阶乘
题目描述 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它? 输入 输入一个整数m(0<m<=5000) 输出 输出m的阶乘,并在输出结束之后输入一个换行 ...