题解 guP4552 IncDec Sequence】的更多相关文章

这道题是一道差分的题目 差分数组p即p[i]=a[i]-a[i-1] 如果我们把一个区间[l,r]里的数+1,那么我们不难发现p[l]'=a[l]+1-a[l-1]=p[l]+1,p[r+1]'=a[r+1]-(a[r]+1)=p[r+1]-1 即一次将两个p[i]+1 or -1 还有一种情况可以使p[l]+1 or -1 ---------------差分数组介绍完毕------------------------- 首先我们看第一小问:输出最少操作次数使所有数相等,即令p[i]==0(i!…
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行,每行一个…
参考链接:https://blog.csdn.net/hzk_cpp/article/details/80407014 题目链接:https://www.acwing.com/problem/content/102/ 前缀和: 就是一个数组,要快速静态查询区间和,我们只要处理一个数组时A[i]=a[1]+a[2]+...+a[i]. A[1]=a[1] A[2]=a[1]+a[2] A[3]=a[1]+a[2]+a[3] A[4]=a[1]+a[2]+a[3]+a[4] ...... 例如:求[…
[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…
2498 IncDec Sequence  时间限制: 1 s  空间限制: 64000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一. 问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 输入描述 Input Description 第一行一个正整数n  接下来n行,每…
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行,每行一个…
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.…
3043: IncDec Sequence Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 578  Solved: 325[Submit][Status][Discuss] Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. Input 第一行一个正整数n 接…
0304 IncDec Sequence 0x00「基本算法」例题 描述 给定一个长度为 n(n≤10^5 ) 的数列 {a_1,a_2,…,a_n},每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一. 求至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列可能有多少种. 输入格式 第一行一个正整数n. 接下来n行,每行一个整数,第i+1行的整数表示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],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 输入 第一行一个正整数n 接下来n行,每行一个整数,第i+1行的整数表示ai. 输出 第一行输出最少操作次数第二行输出最终能得到多少种结果 样例输入 4 1 1 2 2 样例输出 1 2 题解 差分 把原序列差分,考虑所有的$a_i-a_{i-1}(1\le i\le n…
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3043 题意: 给定一个长度为n的数列a[i],每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一. 求:(1)至少需要多少次操作才能使数列中的所有数都一样. (2)在保证最少次数的前提下,最终得到的数列有多少种. 题解: 对于差分来说,给[l,r]+1(或-1)就是给差分数组s[l]+1和s[r+1]-1. 所以数列a[i],是从一个所有元素都相等的初始数组,经过若干次差分…
题目大意:给定一个长度为 N 的序列,现可以进行若干次区间 +1 或区间 -1 操作,求使得序列所有的值均相同的最小操作数是多少,且最终得到的序列有多少种. 题解: 首先考虑执行区间+和区间-操作,可以看成在差分数组上执行单点+1和单点-1操作,即:对于差分数组的一个正值和一个负值可以通过一次操作来修改.尽可能地选出正值和负值进行操作可以保证答案最小.经过若干次选择后,差分序列中均为正值或均为负值.这时,可以执行两种操作来得到不同的序列,第一种是修改当前位置到序列末端的所有值,第二种是修改序列首…
题目描述 给定一个长度为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的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 对于100%的数据,n=100000,0<=ai<2147483648. 注意longlong 注意longlong 注意longlong 注…
题目链接 http://www.lydsy.com/JudgeOnline/problem.php?id=3043[题目描述]给定一个长度为 n 的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种.[输入格式]第一行一个正整数 n ,接下来 n 行,每行一个整数,第 i+1 行的整数表示 ai.[输出格式]第一行输出最少操作次数,第二行输出最终能得到…
题目描述 Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一. 问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 输入描述 Input Description 第一行一个正整数n  接下来n行,每行一个整数,第i+1行的整数表示ai. 输出描述 Output Description 第一行输出最少操作次数 第二行输出最终能得到多少种结果 样例输入 Sampl…
题意:给定一个序列,可以对一个区间进行加1或减1的操作,问最少需要多少次可以将序列的值一样. Solution 我们将序列差分,得到一个差分数组. 对于每一个区间操作,我们可以把它转化为在查分数组上某个位置+1,某个位置-1,范围1-n+1. 目标是除了第一个数之外其他数都为零(这样所有前缀和都相等,满足所有数字都一样的条件). (既然不管第一个数,那我们干脆从2开始差分就好了.) 那我们把正数和负数对着消,最后会剩下一些数. 对于这些数,我们有两种选择,一个是和一消,一个是和n+1消. 所以次…
Problem bzoj & Luogu 题目大意: 给定序列\(\{a_i\}\),求一个严格递增序列\(\{b_i\}\),使得\(\sum \bigl |a_i-b_i\bigr|\)最小 Thought 正序:直接对应 逆序:取中位数(证明:"医院设置") 最优解一定是分段 每一段台阶式上升 每一段选取中位数 沙漏型左偏树 合并区间 选取中位数 upd:貌似不需要沙漏型? Solution 前置技能:小学奥数.可并堆 和上面类似,先不考虑严格上升,即先考虑非严格上升 序…
将1~n压入最多为m元素的栈 给出k个出栈序列,问你是否能够实现. 能输出YES 否则NO 模拟一遍即可,水题. #include <iostream> #include <cstdio> #include <string.h> #include <algorithm> using namespace std; ; int m,n,k; int seq[maxn]; int stacks[maxn]; ; int main() { int val; scan…
题面 差分原数列得到差分数组$dif$,这样对于$dif[2]->dif[n]$会多出来两个“空位置”$1$和$n+1$.然后区间加减就变成了使一个位置$+1$,另一个位置$-1$(可以对“空位置”操作). 那么第一问的答案就是差分数组中$dif[2]->dif[n]$中正数的和$sum1$和负数和的绝对值$sum2$取$max$(贪心地互相消,消不了的给“空位置”消).第二问就是把消不了的$|sum1-sum2|$给空位置配对,答案是$|sum1-sum2|+1$(注意考虑零的情况) #in…
和NOIP2018DAY1T1类似的题目,但思维难度高多了. 这题既可以抬高路面,也可以降低路面,而且目标平面不确定,就难起来了. 但是两道题的基本思路几乎一样,同样我们将 2~n 的高度差分,1之所以不要差分是因为最终的高度是不确定的. 所以现在的目标就是将这个差分数组的任意一个位置 +1/-1 ,另一个位置 -1/+1,使 2~n 的差分数组变成 0,显然最少次数就是 max(正数之和,负数绝对值之和) . 第二问要求最终的可能平面有多少种,考虑操作的过程中当正的或负的已经被搞成 0 ,只剩…
Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一. 问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. Input 第一行一个正整数n . 接下来n行,每行一个整数,第i+1行的整数表示ai. Output 第一行输出最少操作次数. 第二行输出最终能得到多少种结果. 表示看到题很懵逼啊 emm 解释感觉不是很对,希望大佬能指出错误 qwq 这个是差分应该不难…
在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…
一看区间操作,很容易想到差分 所以就是先差分,然后为了保证最小步数,把政府差分抵消,也就相当于原数组区间加减 第二问,因为差分数组抵消之后不为0就需要使用n+1的虚拟位置,而这个的值其实没有,所以我们可以在这个抵消后的数的范围内随意操作,也就是任意取值 #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int N=100005; long long n,a…
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…
题目地址 这道题可以用来检测一下你是否学会了差分,或者你可以更加透彻的理解差分 我们把 \(cf[]\) (差分)数组拿出了,就可以发现这道题就是每次可以在 \(cf[]\)中 选两个数,一个+1,一个-1,如何用最少的步数吧 \(cf[2]-cf[n]\) 中的所有数变成0 考虑到 \(cf[]\) 数组中有负数也有正数,我们设 \(p\) 是所以负数之和,\(q\) 是所以正数之和,我们肯定优先正负抵消,设正负抵消后还有 \(|p-q|\),这是我们让它和 \(cf[1]\) 或者 \(cf…
Link 题目描述 给定一个长度为 \(n\) 的数列 \({a_1,a_2,\cdots,a_n}\),每次可以选择一个区间 \([l,r]\),使这个区间内的数都加 \(1\) 或者都减 \(1\). 请问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 输入格式 第一行一个正整数 \(n\) 接下来 \(n\) 行,每行一个整数,第 \(i+1\) 行的整数表示 \(a_i\)​. 输出格式 第一行输出最少操作次数 第二行输出最终能得到多…
IncDec Sequence 题目大意:给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要多少次操作才能使数列中的所有数都一样,并求出在保证最少次数的前提下,最终得到的数列有多少种. 数据范围:对于100%的数据,n=100000,0<=ai<2147483648 题解: 首先,对于这种操作是区间加啊区间减啊的题,不难想到差分. 现在假设,$b_i = a_i - a_{i - 1}$,$b$序列有$n$个值. 我们要…
放在原来这个地方不太方便,影响阅读体验.为了读者能更好的刷题,另起一篇随笔. 0x00 基本算法 0x01 位运算 [题目][64位整数乘法] 知识点:快速幂思想的灵活运用 [题目][最短Hamilton路径] 知识点: 状压DP.我的题解总是写得不好,大家还是看书吧qwq P2114 [NOI2014]起床困难综合症 知识点:状态压缩 0x02 递推与递归 [题目][费解的开关] 知识点:搜索?递推?模拟? +状压 [题目] 4座塔的Hanoi 知识点:递推 [题目][约数和问题] 知识点:数…