[bzoj3043]IncDec Sequence_差分】的更多相关文章

IncDec Sequence 题目大意:给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 数据范围:对于100%的数据,n=100000,0<=ai<2147483648 题解: 首先,对于这种操作是区间加啊区间减啊的题,不难想到差分. 现在假设,$b_i = a_i - a_{i - 1}$,$b$序列有$n$个值. 我们要…
题目描述 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 输入 第一行一个正整数n 接下来n行,每行一个整数,第i+1行的整数表示ai. 输出 第一行输出最少操作次数第二行输出最终能得到多少种结果 样例输入 4 1 1 2 2 样例输出 1 2 题解 差分 把原序列差分,考虑所有的$a_i-a_{i-1}(1\le i\le n…
IncDec序列 题目描述: 给定一个长度为 n 的数列 a1,a2,…,an,每次可以选择一个区间[l,r],使下标在这个区间内的数都加一或者都减一. 求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种. 输入格式: 第一行输入正整数n. 接下来n行,每行输入一个整数,第i+1行的整数代表ai. 输出格式: 第一行输出最少操作次数. 第二行输出最终能得到多少种结果. 数据范围: 0<n≤10^5, 0≤ai<21474836480≤ai&…
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=3043 [题解] 比较神奇的一道题,开始没往差分的角度上想,所以没想出来. 考虑查分数组,有$n-1$个数,那么操作变成一个地方+1,一个地方-1. 显然最后是要让差分数组全部变成0. 设差分后所有正数的和为$cnt_a$,负数的绝对值和为$cnt_b$. 为了方便说明,我们在数组前和数组后分别增加一个虚拟差分位置.这两个位置的数是可以是任意的. 那么如果$cnt_a \not= cnt_b…
突然就提到了这个东西,为了不再出现和去年联赛看见二分没学二分痛拿二等第一的情况,就去学了一下,基础还是比较简单的-- 先看一个经典例题: 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 对于100%的数据,n=100000,0<=ai<2147483648. 注意longlong 注意longlong 注意longlong 注…
Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) #define ll long long #define maxn 100034 using namespace std; ll a[maxn]; int main() { // setIO("input"); int n; scanf("%d",&n); fo…
Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一. 问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. Input 第一行一个正整数n . 接下来n行,每行一个整数,第i+1行的整数表示ai. Output 第一行输出最少操作次数. 第二行输出最终能得到多少种结果. 表示看到题很懵逼啊 emm 解释感觉不是很对,希望大佬能指出错误 qwq 这个是差分应该不难…
[BZOJ3043]IncDec Sequence Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. Input 第一行一个正整数n 接下来n行,每行一个整数,第i+1行的整数表示ai.. Output 第一行输出最少操作次数第二行输出最终能得到多少种结果 Sample Input 4 1 1 2 2 Sa…
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.…
题意:给定一个序列,可以对一个区间进行加1或减1的操作,问最少需要多少次可以将序列的值一样. Solution 我们将序列差分,得到一个差分数组. 对于每一个区间操作,我们可以把它转化为在查分数组上某个位置+1,某个位置-1,范围1-n+1. 目标是除了第一个数之外其他数都为零(这样所有前缀和都相等,满足所有数字都一样的条件). (既然不管第一个数,那我们干脆从2开始差分就好了.) 那我们把正数和负数对着消,最后会剩下一些数. 对于这些数,我们有两种选择,一个是和一消,一个是和n+1消. 所以次…