bzoj1367】的更多相关文章

首先考虑把bi和ai同时减i,问题变为非严格递增.显然如果a是一个递减序列,b序列所有数都取其中位数最优.于是划分原序列使得每一部分递减,然后考虑合并相邻两段.如果前一段的中位数<=后一段的中位数,显然各自b的取值不变就行了:否则将b的取值统一改为合并后序列的中位数.感性证明. 于是用左偏树维护中位数即可.具体操作时并不需要每次加一段,而是加一个就可以了,维护每段较小的⌈len/2⌉个数的大根堆,合并时如果两段的长度都为奇数就弹出一个,否则不变.因为只加一个,不会出现本应成为中位数的数被丢掉的情…
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1367 题意概括 Description Input Output 一个整数R 题解 http://blog.csdn.net/u011265346/article/details/46532421 我被自己坑死了. 左偏树合并: if (a==0||b==0) return a+b; 这样是对的. 然而: if (a*b==0) return a+b; 这样是错的. 原因是:a*b会爆int………
题目链接 BZOJ1367 题解 又是一道神题,, 我们考虑一些简单的情况: 我们先假设\(b_i\)单调不降,而不是递增 对于递增序列\(\{a_i\}\),显然答案\(\{b_i\}\)满足\(b_i = a_i\) 对于递减序列\(\{a_i\}\),显然答案\(\{b_i\}\)满足\(b_i\)为\(a_i\)的中位数 于是我们有了初步的想法: 将\(a_i\)分成若干个单调递减的段,每段的答案为其中位数 然后顺次访问段 如果两段的答案是递增的,显然这两段就没有影响,相互独立了,就保留…
[BZOJ1367][Baltic2004]sequence 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 题解:详见论文 然而本题要求z[i]严格递增,那就让所有t[i]-=i就好了 #include <cstdio> #include <cstring> #include <iostrea…
题面 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 Solution 我们首先来考虑另一个问题: 给定一个数列\(\{a_n\}\), 求一个单调不下降的\(\{b_n\}\), 使得\(\sum |b_n - a_n|\)最小. 考虑两种较为特殊情况: \(a_1 \le a_2 \le ... \le a_…
1367: [Baltic2004]sequence Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 932  Solved: 348[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 Solution 论文…
1.题目大意:给一个序列t,然后求一个序列z,使得$|z1-t1|+|z2-t2|+...+|zn-tn|$的值最小,我们只需要求出这个值就可以了,并且z序列是递增的 2.分析:这道题z序列是递增的,不好做啊,我们想让z序列变成不降的,可以将t数组进行改变,就是t[i]-=i.不降的就好做多了,我们可以让一段下降的t序列对应的z序列全是中位数.但是我们还要维护z序列是单调的,于是我们从头扫,用一个单调栈,对于每一个t,先压进栈,如果栈顶元素的中位数比栈的第二个元素要小,就把栈顶和第二个元素合并,…
2016-05-31 17:31:26 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1367 题解:http://www.cnblogs.com/rausen/p/4033724.html 说一下堆里维护的是什么. 维护的是所代表区间的中位数,这是一棵大根堆,只有序列递减时我们才会合并堆,也就是加入的数是小的,所以只会将中位数变小,弹出堆顶更新. 题目要求的是单增的序列,但我们这样求出的是不减. 一个小技巧,就是每个数在读入时减去i,这样…
现学的左偏树...这可是道可并堆的好题目. 首先我们考虑z不减的情况: 我们发现对于一个区间[l, r],里面是递增的,则对于此区间最优解为z[i] = t[i]: 如果里面是递减的,z[l] = z[l + 1] = ... = z[r] = 这段数的中位数,不妨叫做w.(此处我们定义中位数为第(r - l + 1) / 2大的数,因为这并不影响结果) 而其实递增可以转化为每一段只有一个点,就等价于递减了. 那么我们把原数列分段,每段都是递减的,而每一段的z都是那段的中位数w.这样就找到了最优…
题解: 左偏树模板题 维护n/2的好多课左偏树 每一次加进来一个点的时候,只有一个点 然后每次中位数比前面小的时候,那么和前面合并 代码: #include<bits/stdc++.h> using namespace std; ; long long ans; ],dist[N],val[N],tot,size[N],n,a[N],l[N]; int merge(int x,int y) { if (!x||!y)return x+y; if (val[x]<val[y])swap(x…
题面 参考:<左偏树的特点及运用--黄河源> 我们将这个数列划为很多个互不相交的区间,每一段区间内的 \(b\) 是相等的,即 \(b[l[i]]=b[l[i]+1]=...=b[r[i]]=w[i]​\), \(l[i],r[i]​\) 为区间 \(i​\) 的左右端点 先假设题目时要求b不下降的(比较好讨论),那么答案应该会呈现出这样子: 定理一:对于单个区间的最优解为其中位数,即 \(a[l[i]],a[l[i]+1],...,a[r[i]]\) 的最优解为 \(b[l[i]]=b[l[…
浅谈左偏树:https://www.cnblogs.com/AKMer/p/10246635.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?id=1367 显然,如果给出的数组是递增的,那么答案就是\(0\). 如果给出的数组是递减的,根据贪心的思想答案就是\(\sum\limits_{i=1}^{n}|x-t_i|\),\(x\)是\(t\)数组的中位数. 但是给出的数组是无序的. 我们可以把这个数组划成一段段的,每一段都选一个\(x…
题目描述 输入 输出 一个整数R 样例输入 7 9 4 8 20 14 15 18 样例输出 13 题解 可并堆,黄源河<左偏树的特点及其应用>Page 13例题原题 #include <cstdio> #include <cstring> #include <algorithm> #define N 1000010 using namespace std; int a[N] , root[N] , l[N] , r[N] , d[N] , w[N] , t…
n<=1e6个数,把他们修改成递增序列需把每个数增加或减少的总量最小是多少? 方法一:可以证明最后修改的每个数一定是原序列中的数!于是$n^2$DP(逃) 方法二:把$A_i$改成$A_i-i$,变论文题:论文 大概证明是这样的:考虑合并两个区间的答案,假如一个区间答案是{u,u,u,……,u},另一个是{v,v,v,……,v},那合并之后,如果u<=v最优就{u,u,……,u,v,……,v}:如果u>v,假设最优是 {b1,b2,……,bn,bn+1,……,bm},那么一定有bn<…
题意: 题解: 其实这是道水题啦……只不过我没做过而已 先考虑构造不严格递增序列,考虑原序列中的一段下降区间,显然区间中的$z$全取中位数最优: 那么可以把原序列拆成很多个下降序列,从头到尾加入原序列中的数,每次把加进来的数看成一个新的下降区间,然后不断合并最后两个区间直到,最后一个区间的中位数不小于倒数第二个区间的中位数: 用可合并堆维护即可,左偏树啥的都行,我写的斜堆: 可合并堆如何维护区间中位数?只保留较小一半的数,则堆顶就是中位数: 要构造严格递增序列只需要把原序列中的每个数$t_i$减…
Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Output 13 解题思路: 有趣的数学题. 首先确定序列的构造方式. 要求差的绝对值最小,并且递增. 这肯定是照着A序列做的,那么很显然的结论: 若A是递增的,那么Z一定是A序列. 若A是平的,那么Z一定是公差为1的等差数列,中位数为A中的唯一值. 那么就发现了,若保证其非减的话是非常容易得到最优解的. 不断合并中位数即可,原理就是绝对值函数那个好几截…
考虑两种情况: 1.\(a_1\)<\(a_2\)<\(a_3\)<\(a_4\)...<\(a_n\) 直接令\(b_i\)=\(a_i\),最小. 2.\(a_1\)>\(a_2\)>\(a_3\)>\(a_4\)...>\(a_n\) 初一的一道绝对值题是这题的弱化版. 给定\(a_1\),\(a_2\)...\(a_n\),求一点x,使得\(abs(a_1-x)\)+\(abs(a_2-x)\)...+\(abs(a_n-x)\)值最小 直接求中位数…
给个$n<=2000$长度数列,可以把每个数改为另一个数代价是两数之差的绝对值.求把它改为单调不增or不减序列最小代价. 话说这题其实是一个结论题..找到结论应该就很好做了呢. 手玩的时候就有感觉,改造出来的数列的元素会不会全是原来数列里有的数?弄了几组发现没问题,但是还是踟蹰不前,不敢下手..然后我就智障的换思路了...这个故事告诉我们发现一个暂时没找到反例的结论一定要大胆实践,反正交到OJ上不要钱. 所以这题结论就上面那个.具体证明呢..我不会... 然后就简单了啊.有个很好想的状态$f[i…
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1367 题解 先考虑条件为要求不下降序列(不是递增)的情况. 那么考虑一段数值相同的子段,这一段相同的数值显然应该是原序列 \(t\) 中对应的位置上的数的中位数. (不是中位数答案一定比中位数大) 所以问题转化为划分成很多段,每一段的权值是中位数,要求权值不下降. 对于一段,每一次往前扫,只要前面的中位数比它大,那么就合并. 可以用可并堆维护每一段,只保留中位数以下的数.合并左偏树实现即可.…
高级数据结构 一.左偏树&斜堆 orz黄源河论文 合并,插入,删除根节点 打标记 struct Node { int fa,l,r,w,dep } tree[Mx]; int Merge(int k1,int k2)//返回值为根节点 { ||k2==) return k1+k2; if(tree[k1].val<tree[k2].val) swap(k1,k2); tree[k1].r=Merge(tree[k1].r,k2); tree[tree[k1].r].fa=k1; if(tre…
一.什么是贪心 贪心算法嘛... 就是在对某个问题求解时,总是做出在当前看来是最好的选择 In other wors,并不是从整体最优上加以考虑,而是在获得某种意义上的局部最优解 二.贪心算法的适用前提 局部的最优解能导致最后整体的最优解,即局部的最优解不受该部分以外的东西的影响 对于贪心算法,我们需要证明:整个问题的最优解一定由在贪心策略中存在的子问题的最优解得来的 实际上,能用贪心算法的问题很少,大部分看上去能用贪心算法去做的题目,其实都得不到最优解T T(这时候就需要运用动态规划了) 而看…
左偏树 炒鸡棒的论文<左偏树的特点及其应用> 虽然题目要求比论文多了一个条件,但是……只需要求非递减就可以AC……数据好弱…… 虽然还没想明白为什么,但是应该觉得应该是这样——求非递减用大顶堆,非递增小顶堆…… 这题和bzoj1367题意差不多,但是那题求的是严格递增.(bzoj找不到那道题,可能是VIP或什么原因? 严格递增的方法就是每一个数字a[i]都要减去i,这样求得的b[i]也要再加i,保证了严格递增(为什么对我就不知道了 代码比较水,因为题目数据的问题,我的代码也就钻了空子,反正ac…
1367: [Baltic2004]sequence Time Limit: 20 Sec   Memory Limit: 64 MB Submit: 521   Solved: 159 [ Submit][ Status] 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 左偏树+1 这题裸裸的左偏树,我却各种W…
从联赛活了下来(虽然分数倒一……),接下来要去CDQZ集训啦…… DAY -2 2017-12-16 被老师安排负责一部分同学的住宿以及安排…… 抓紧时间继续学习,LCT真好玩啊真好玩…… 晚上放假了…… DAY -1 2017-12-17 放假进行中……下午转场到了石家庄. 与srs,wzz,wxh几个dalao住在一个宾馆,晚上出去吃饭…… DAY 0 2017-12-18 4:30早起……到机场. 似乎没有想象中的麻烦…… 很顺利的登机,起飞的时候气压的确有一些奇怪的问题……耳朵有点难受…
counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ1202 BZOJ1051 BZOJ1001 BZOJ1588 BZOJ1208 BZOJ1491 BZOJ1084 BZOJ1295 BZOJ3109 BZOJ1085 BZOJ1041 BZOJ1087 BZOJ3038 BZOJ1821 BZOJ1076 BZOJ2321 BZOJ1934 BZOJ…
题解: 和bzoj1367差不多 然后a[i]-i不用加 然后我再另一个地方加了这句话 然后poj ac,bzoj wa poj数据水啊 代码: #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> using namespace std; ; long long ans,ans1,ans2; ],dist[N],val[N],tot,size[N],n,a[N],l[N…
沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道就行了. BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ1202 BZOJ1051 BZOJ1001 BZOJ1588 BZOJ1208 BZOJ1491 BZOJ1084 B…
左偏树 炒鸡棒的论文<左偏树的特点及其应用> 虽然题目要求比论文多了一个条件,但是……只需要求非递减就可以AC……数据好弱…… 虽然还没想明白为什么,但是应该觉得应该是这样——求非递减用大顶堆,非递增小顶堆…… 这题和bzoj1367题意差不多,但是那题求的是严格递增.(bzoj找不到那道题,可能是VIP或什么原因? 严格递增的方法就是每一个数字a[i]都要减去i,这样求得的b[i]也要再加i,保证了严格递增(为什么对我就不知道了 代码比较水,因为题目数据的问题,我的代码也就钻了空子,反正ac…