BZOJ 3043: IncDec Sequence

3043: IncDec Sequence

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 578  Solved: 325
[Submit][Status][Discuss]

Description

给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一。
问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种。

Input

第一行一个正整数n 
接下来n行,每行一个整数,第i+1行的整数表示ai。

Output

第一行输出最少操作次数
第二行输出最终能得到多少种结果

Sample Input

4
1
1
2
2

Sample Output

1
2

HINT

对于100%的数据,n=100000,0<=ai<2147483648

Source

Poetize6

分析:

差分的思想...

考虑在原来的数列中对一个区间$[l,r]+1$,那么就相当于在差分之后的数列上对$l+1$对$r+1$进行$-1$操作,所以我们可以统计出差分之后的数列中的正数和负数,正数和负数可以相消,剩下的数字有两种选择,一种是自己消...一种是和第一个数消...所以最少的次数位$max(positive,negative)$,数列个数就是$abs(positive-negative)+1$...

代码:

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
//by NeighThorn
using namespace std;

const int maxn=100000+5;

int n,a[maxn];
long long pos,neg;

signed main(void){
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<n;i++)
		if(a[i]<a[i+1]) pos+=a[i+1]-a[i];
		else if(a[i]>a[i+1]) neg+=a[i]-a[i+1];
	printf("%lld\n%lld\n",max(pos,neg),abs(pos-neg)+1);
	return 0;
}

  



By NeighThorn

时间: 2024-10-20 22:38:01

BZOJ 3043: IncDec Sequence的相关文章

bzoj 3043: IncDec Sequence 模拟

3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 248  Solved: 139[Submit][Status] Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. Input 第一行一个正整数n 接下来n行,每行一个

BZOJ 3043 IncDec Sequence 差分

题目大意:给定一个序列,提供一个操作:将某个区间内所有数+1或-1 求将所有数变成一样最少多少次操作,以及最终可以有多少种数 考虑差分后的序列 每次对[l,r]进行+1/-1,相当于在差分后的数组上对l进行+1/-1,然后对r+1进行-1/+1 特殊的,如果r=n,那么就相当于对l进行了+1/-1 我们最终的目标是将差分数组变成第一个位置是最终的数字,2~n都是0 那么我们统计差分后的数组的2~n号位置上每个位置上的数 令pos为所有正数的和,neg为所有负数的和的绝对值 那么首先是pos和ne

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

3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 589  Solved: 332 Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. Input 第一行一个正整数n 接下来n行,每行一个整数,第i+1行的整数表示ai.

BZOJ3043: IncDec Sequence

3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 233  Solved: 132[Submit][Status] Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. Input 第一行一个正整数n 接下来n行,每行一个

2498 IncDec Sequence

2498 IncDec Sequence 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一. 问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 输入描述 Input Description 第一行一个正整数n  接下来n行,每行一个整数,第i

bzoj 1367: [Baltic2004]sequence

1367: [Baltic2004]sequence Time Limit: 20 Sec  Memory Limit: 64 MB Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Output 13 HINT 所求的Z序列为6,7,8,13,14,15,18.R=13 详细证明请看IOI2005国家集训队论文  黄源河 https://wenku.baidu.com/view/20e9ff18964b

bzoj 1367: [Baltic2004]sequence(中位数+可并堆)

1367: [Baltic2004]sequence Time Limit: 20 Sec  Memory Limit: 64 MB Submit: 935  Solved: 351 [Submit][Status][Discuss] Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Output 13 HINT 所求的Z序列为6,7,8,13,14,15,18. R=13 Source [Submit]

IncDec Sequence

题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3043[题目描述]给定一个长度为 n 的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种.[输入格式]第一行一个正整数 n ,接下来 n 行,每行一个整数,第 i+1 行的整数表示 ai.[输出格式]第一行输出最少操作次数,第二行输出最终能得到

IncDec Sequence(codevs 2098)

题目描述 Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一. 问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 输入描述 Input Description 第一行一个正整数n  接下来n行,每行一个整数,第i+1行的整数表示ai. 输出描述 Output Description 第一行输出最少操作次数 第二行输出最终能得到多少种结果 样例输入 Sampl