【Luogu5294】[HNOI2019]序列】的更多相关文章

题目链接 题意 给定一个序列,要求将它改造成一个非降序列,修改一个数的代价为其改变量的平方. 最小化总代价. 另有\(Q\) 次询问,每次修改一个位置上的数.(询问之间独立,互不影响) Sol 神仙 保序回归 问题,完全不会. 首先是一个暴力的每次 \(O(n)\) 做法. 结论是: 最后的结果序列一定是一段段的相同的数,其值为段中所有元素的平均数. 所以暴力就是维护一个单调栈. 每次加入一个数后形成一段. 然后不断比较栈顶的段和下面一个段的平均数的大小,如果栈顶小一些就把它和下面那个段合并.…
点此看题面 大致题意: 给你一个长度为\(n\)的序列\(A\),每次询问修改一个元素(只对当前询问有效),然后让你找到一个不下降序列\(B\),使得这两个序列相应位置之差的平方和最小,并输出这个最小平方和. 如何预处理 首先,仔细观察样例解释,我们可以发现一个有趣的性质:对于\(B\)序列中相同的一段元素,它们在\(A\)序列中恰好是这一段区间中所有数的平均数. 因此,我们大胆猜测:我们可以把\(A\)序列划分成若干段,然后求出每段的平均值,就可以求出最后的\(B\)序列. 那么,现在我们要做…
原题传送门 题意:给你一个长度为\(n\)的序列\(A\),每次询问修改一个元素(只对当前询问有效),然后让你找到一个不下降序列\(B\),使得这两个序列相应位置之差的平方和最小,并输出这个最小平方和 观察样例说明,发现一个很有趣的性质,\(B\)中数字相同的一段的数字正好是\(A\)中这段数字的平均数 那我们就珂以猜想:最优解的形式一定为分成若干段,每一段的\(B_i\)即取其中\(A_i\)的平均数,同时保证\(B\)的有序性(这篇论文好像有证明) 如何求出最优的\(B\)?我们珂以使用单调…
通过打表证明发现答案就是把序列划分成若干段,每段的b都是这一段a的平均数.50分做法比较显然,就是单调栈维护,每次将新元素当成一个区间插入末尾,若b值不满足单调不降,则将这个区间与单调栈前一个区间合并. 由于题目要求每次只修改一个数,所以可以前后缀拼起来,单调栈要改变,然后发现这个显然满足二分的性质,二分完位置左端点后再二分右端点,写一个可持久化单调栈维护一下就可以了. 还有一种主席树做法,后序可能会补上. #include<bits/stdc++.h> using namespace std…
题目传送门 题目大意 给出一个\(n\)个数的数列\(A_{1,2,...,n}\),求出一个单调不减的数列\(B_{1,2,...,n}\),使得\(\sum_{i=1}^{n}(A_i-B_i)^2\)最小. 有\(m\)次查询,每次将某个\(A_x\)更改为\(y\),求出修改后的答案.查询之间互相独立. \(n,m\le 10^5\) 思路 其实这道题正解是用保序回归,但是找规律也能找出来. 我们通过观察发现,对于一段相同的\(B_i\),\(B_i\)是该段的平均值.于是我们大胆猜测,…
传送门 这个什么鬼证明直接看uoj的题解吧根本不会证明 首先方案一定是若干段等值的\(B\),然后对于一段,\(B\)的值应该是\(A\)的平均值.这个最优方案是可以线性构造的,也就是维护以区间平均值为权值的单调栈,每次在后面插入一个元素,不断弹栈并与最后一个合并,直到平均值单调递增 然后这个单调栈是可以两个区间的单调栈直接合并的,因为合并完后新单调栈的断点集合是原来两段的断点集合的子集.合并直接暴力就好了合并的话一定是前面那个的一段后缀的后面的一段前缀合并,然后后面的前缀位置(就是合并区间的右…
NOTICE:如觉得本文有什么错误或不妥之处,欢迎评论区以及私信交流,反对乱喷,如有一些让人不爽的评论或人身攻击,带来的后果本人一律不负责 准备工作 Day-inf~Day-3 000 every day Day-2 洛咕月赛爆零... Day-1 rp全部浪费在准考证号上了/dk 一直在做NOIP真题,然后一个晚上被填数游戏搞没了,脑壳贼痛/dk Day0 上午db,然后写总结&复习 时间真的是快啊,上次NOI刚目送了一批学长退役,现在又到了退役的时刻了 对于今年才有的CSP,鬼知道他的出题是…
Loj #3059. 「HNOI2019」序列 给定一个长度为 \(n\) 的序列 \(A_1, \ldots , A_n\),以及 \(m\) 个操作,每个操作将一个 \(A_i\) 修改为 \(k\).第一次修改之前及每次修改之后,都要求你找到一个同样长度为 \(n\) 的单调不降序列 \(B_1, \ldots , B_n\),使得 \(\sum_{i=1}^n (A_i −B_i)^2\) 最小,并输出该最小值.需要注意的是每次操作的影响都是独立的,也即每次操作只会对当前询问造成影响.为…
题目 给出一个长度为 \(n\) 的序列 \(A\) ; 你需要构造一个新的序列\(B\) ,满足: $B_{i} \le B_{i+1} (1 \le i \lt n ) $ $\sum_{i=1}^{n} (A_i - B_i)^2 $ 最小 题解 出题人和题解在这里 : http://15283746.blog.uoj.ac/blog/4966 我只是整理了一下证明(Part 1)并套了一种做法(Part 2): Part 1 主要讨论最优的策略: 引理一: 如果要求所有\(B_i\)相同…
题目:https://loj.ac/problem/3059 一段 A 选一个 B 的话, B 是这段 A 的平均值.因为 \( \sum (A_i-B)^2 = \sum A_i^2 - 2*B \sum A_i + len*B^2 \) ,这是关于 B 的二次方程,对称轴是 \( B = - \frac{-2*\sum A_i}{2*len} \) ,恰是 A 的平均值. 所以自己前 10 分写了 “ dp[ i ][ j ] 表示前 i 个 A .最后一段的 B = j ” 的 DP ,…