Luogu 4552 [Poetize6] IncDec Sequence
在BZOJ上好像被权限掉了。
考虑差分,定义差分数组$b$
$$b_i = \left\{\begin{matrix}
a_i \ \ \ (i == 1)\\
a_i - a_{i - 1}\ \ \ (i > 1)
\end{matrix}\right.$$
那么我们最后就是要使 $\forall i \in [2, n]\ \ b_i == 0$,并不关心$b_1$的取值。
差分之后区间修改变成了$+1$和$-1$的单点修改,如果要用最少的次数完成修改,那么肯定先要对所有$b_i > 0$的进行$-1$的操作,而$b_i < 0$得进行$+1$的操作,发现正负数可以两两配对,设$b_i$ $i \in [2, n]$中所有正数的和为$p$,所有负数的绝对值和为$q$,那么有$min(p, q)$次可以配对修改,还有$\left | p - q \right |$需要拎出来单独修改,那么第一问的答案就是$min(p, q) + \left | p - q \right | = max(p, q)$。
而第二问相当于求有多少个$b_1$,易得答案为$\left | p - q \right | + 1$。
时间复杂度$O(n)$。
注意开$long \ long$。
Code:
- #include <cstdio>
- #include <cstring>
- using namespace std;
- typedef long long ll;
- const int N = 1e5 + ;
- int n;
- ll a[N], b[N], sumP = , sumN = ;
- template <typename T>
- inline void read(T &X) {
- X = ; char ch = ; T op = ;
- for(; ch > ''|| ch < ''; ch = getchar())
- if(ch == '-') op = -;
- for(; ch >= '' && ch <= ''; ch = getchar())
- X = (X << ) + (X << ) + ch - ;
- X *= op;
- }
- template <typename T>
- inline T max(T x, T y) {
- return x > y ? x : y;
- }
- template <typename T>
- inline T abs(T x) {
- return x > ? x : -x;
- }
- int main() {
- read(n);
- for(int i = ; i <= n; i++) {
- read(a[i]);
- b[i] = a[i] - a[i - ];
- if(i == ) continue;
- if(b[i] < ) sumN -= b[i];
- if(b[i] > ) sumP += b[i];
- }
- printf("%lld\n%lld\n", max(sumN, sumP), abs(sumP - sumN) + 1LL);
- return ;
- }
Luogu 4552 [Poetize6] IncDec Sequence的更多相关文章
- Poetize6: IncDec Sequence
3043: IncDec Sequence Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 233 Solved: 132[Submit][Statu ...
- 解题: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 [Poetize6] IncDec Sequence
题目描述 给定一个长度为n的数列$a_1,a_2,--,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 ...
随机推荐
- Linux-压缩与解压缩命令
常用的压缩格式:.zip .gz .bz2 .tar.gz .tar.bz2 1.Zip 压缩文件:zip 压缩文件名 源文件 压缩目录:zip -r 压缩文件名 源文件 解压缩.z ...
- 树莓派相机操作 —— luvcview 的安装、raspistill:摄像头命令
MMAL (Multimedia Abstraction Layer) RaspiCam Documentation 0. lucview 的安装 安装命令:sudo apt-get install ...
- mysql_union all 纵向合并建表_20170123
年前事情比较多,博客不能每天更新了. 1.union all 纵向建表和left join 横向建表的数据结构区别 先贴代码 后面再补充 (#销售确认额 SELECT '05收货销售额' AS 标识, ...
- Windbg内核调试之四: Dump文件分析
Dump 文件分析很大程度上就是分析蓝屏产生的原因.这种系统级的错误算是Windows提示错误中比较严重的一种(更严重的还有启动黑屏等硬件或软件兼容性错误等等).说它是比较严重,是因为毕竟Window ...
- mendeley 参考文献管理工具
本文由Suzzz原创,发布于http://www.cnblogs.com/Suzzz/p/4044144.html,转载请保留此声明 目录 介绍 功能 运行截图 安装方法 创建 Desktop Ent ...
- 技术总监Sycx的故事
其实我在各种演讲里,线下吹牛里面无数次提及过他,讲过他的故事,但是总还是没有任何一次认认真真的详细讲过,所以,今天就讲讲他的故事吧. Sycx是福建漳州人,我经常开玩笑说,你生于一个著名的骗子之乡,为 ...
- VerilogHDL编译预处理
编译预处理语句 编译预处理是VerilogHDL编译系统的一个组成部分,指编译系统会对一些特殊命令进行预处理,然后将预处理结果和源程序一起在进行通常的编译处理.以”`” (反引号)开始的某些标识符是编 ...
- 蓝桥杯 算法训练 ALGO-152 8-2求完数
算法训练 8-2求完数 时间限制:50.0s 内存限制:256.0MB 问题描述 如果一个自然数的所有小于自身的因子之和等于该数,则称为完数.设计算法,打印1-9999之间的所有完数. 样例 ...
- Java基础--枚举Enum
Java中的枚举是一种特殊的类,可以将一组固定常量的集合组成一种类型,使用方便且类型安全.使用enum关键字定义. enum类型父类为Enum,通过Enum.class可见Enum为抽象类,实现了Co ...
- java代码。。重温JPassword,JLabel,JPanel
package com.kk; //JPasswordField类的使用 import java.awt.Color; import java.awt.FlowLayout; import javax ...