【bzoj1367】[Baltic2004]sequence
2016-05-31 17:31:26
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1367
题解:http://www.cnblogs.com/rausen/p/4033724.html
说一下堆里维护的是什么。
维护的是所代表区间的中位数,这是一棵大根堆,只有序列递减时我们才会合并堆,也就是加入的数是小的,所以只会将中位数变小,弹出堆顶更新。
题目要求的是单增的序列,但我们这样求出的是不减。
一个小技巧,就是每个数在读入时减去i,这样就保证了修改后的序列不减的情况下,是原序列的单增。
而这种改变是极小的,即不会改变答案大小。
#include<bits/stdc++.h>
#define inf 1000000000
#define ll long long
#define N 1000005
using namespace std;
int read(){
int x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,tot,rt[N],v[N],dep[N],ls[N],rs[N],l[N],r[N],cnt[N],num[N];
int merge(int x,int y){
if(!x||!y)return x+y;
if(v[x]<v[y])swap(x,y);
rs[x]=merge(rs[x],y);
if(dep[ls[x]]<dep[rs[x]])swap(ls[x],rs[x]);
dep[x]=dep[rs[x]]+;
return x;
}
int main(){
n=read();
for(int i=;i<=n;i++)v[i]=read()-i;
for(int i=;i<=n;i++){
++tot;
rt[tot]=i;cnt[tot]=;num[tot]=;
l[tot]=r[tot]=i;
while(tot>&&v[rt[tot]]<v[rt[tot-]]){
--tot;
rt[tot]=merge(rt[tot],rt[tot+]);
num[tot]+=num[tot+];cnt[tot]+=cnt[tot+];r[tot]=r[tot+];
for(;cnt[tot]*>num[tot]+;cnt[tot]--)rt[tot]=merge(ls[rt[tot]],rs[rt[tot]]);
}
}
ll ans=;
for(int i=;i<=tot;i++)
for(int j=l[i],w=v[rt[i]];j<=r[i];j++)
ans+=abs(v[j]-w);
printf("%lld\n",ans);
return ;
}
1367: [Baltic2004]sequence
Time Limit: 20 Sec Memory Limit: 64 MB
Submit: 953 Solved: 362
[Submit][Status][Discuss]
Description

Input

Output
Sample Input
9
4
8
20
14
15
18
Sample Output
HINT
所求的Z序列为6,7,8,13,14,15,18.
R=13
【bzoj1367】[Baltic2004]sequence的更多相关文章
- 【BZOJ1367】[Baltic2004]sequence 左偏树
[BZOJ1367][Baltic2004]sequence Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sampl ...
- 【bzoj1367】[Baltic2004]sequence 可并堆
题目描述 输入 输出 一个整数R 样例输入 7 9 4 8 20 14 15 18 样例输出 13 题解 可并堆,黄源河<左偏树的特点及其应用>Page 13例题原题 #include & ...
- 【arc071f】Infinite Sequence(动态规划)
[arc071f]Infinite Sequence(动态规划) 题面 atcoder 洛谷 题解 不难发现如果两个不为\(1\)的数连在一起,那么后面所有数都必须相等. 设\(f[i]\)表示\([ ...
- 【arc074e】RGB Sequence(动态规划)
[arc074e]RGB Sequence(动态规划) 题面 atcoder 洛谷 翻译见洛谷 题解 直接考虑暴力\(dp\),设\(f[i][j][k][l]\)表示当前考虑到第\(i\)位,最后一 ...
- 【BZOJ3043】IncDec Sequence 乱搞
[BZOJ3043]IncDec Sequence Description 给定一个长度为n的数列{a1,a2...an},每次可以选择一个区间[l,r],使这个区间内的数都加一或者都减一.问至少需要 ...
- 【BZOJ-1367】sequence 可并堆+中位数
1367: [Baltic2004]sequence Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 932 Solved: 348[Submit][S ...
- 【BZOJ1367】【Baltic2004】sequence - 可合并堆
题意: 题解: 其实这是道水题啦……只不过我没做过而已 先考虑构造不严格递增序列,考虑原序列中的一段下降区间,显然区间中的$z$全取中位数最优: 那么可以把原序列拆成很多个下降序列,从头到尾加入原序列 ...
- 【XSY2985】【BZOJ1367】【Baltic2004】sequence
考虑两种情况: 1.\(a_1\)<\(a_2\)<\(a_3\)<\(a_4\)...<\(a_n\) 直接令\(b_i\)=\(a_i\),最小. 2.\(a_1\)> ...
- 【POJ2778】DNA Sequence(AC自动机,DP)
题意: 生物课上我们学到,DNA序列中只有A, C, T和G四种片段. 经科学发现,DNA序列中,包含某些片段会产生不好的基因,如片段"ATC"是不好片段,则"AGATC ...
随机推荐
- MVC4 遇到问题总结
1.路径编写: 举例1.<img src="../Login/VailCode" width="108" height="40"&g ...
- ytu 1058: 三角形面积(带参的宏 练习)
1058: 三角形面积 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 190 Solved: 128[Submit][Status][Web Boar ...
- 查看Linux分区格式
第一种方法: 使用mount [root@ol6-121-rac1 ~]# mount /dev/mapper/vg_ol6121rac1-lv_root on / type ext4 (rw) ...
- [javascript] 使用闭包编写模块
这是一篇[javascript the good parts]的读书笔记. 我们知道可以利用javascript 的prototype 特性为原始类型编写拓展模块.利用如下方法: Object.pro ...
- DB2 日期相减
简单方法: 使用 days 字符型的日期:2012-01-01,2012-01-11 values days(date('2012-01-11')) - days(date('2012-01-01' ...
- 利用YaHoo YUI实现Javascript CSS 压缩 分类: C# 2014-07-13 19:07 371人阅读 评论(0) 收藏
网站优化时,往往需要对js文件,css文件进行压缩,以达到减少网络传输数据,减少网页加载时间:利用YaHoo的YUI可以实现Javascript,CSS,压缩,包括在线的js压缩和程序压缩,发现C#也 ...
- ORA-1461 encountered when generating server alert SMG-3500
Doc ID 461911.1 Patch 6602742 Applies to: Oracle Database - Enterprise Edition - Version 10.2.0.3 an ...
- Datagard產生gap
本文轉載自無雙的小寶的博客:http://www.cnblogs.com/sopost/archive/2010/09/11/2190085.html 有時候因為網路或備份故障等原因,主機所產生的歸檔 ...
- ubuntu wubi非在线快速安装
最近ubuntu更新了,就想把它重新装回来试一下,但是由于种种原因划分磁盘不太方便,很自然就想到了wubi,这个不仅仅安全性高,而且比直接装系统快多了,而且方便.但是在线安装实在是太慢了,所以就找到了 ...
- codeforce好地方啊 Bear and Elections *
Codeforces Round #318 居然可以看测试数据,哪里没过一目了然,哈哈哈 #include<cstdio> #include<iostream> #includ ...