BZOJ1367: [Baltic2004]sequence(左偏树)
Description

Input

Output
Sample Input
9
4
8
20
14
15
18
Sample Output
解题思路:
#include<cstdio>
#include<cstring>
#include<algorithm>
#define lll l[x].ls
#define rrr l[x].rs
typedef long long lnt;
struct lhnt{
int ls;
int rs;
int fa;
int dis;
lnt val;
}l[];
struct seg{
int l;
int r;
int wgt;
int root;
lnt val;
seg(){};
seg(int x,lnt y)
{
l=r=root=x;
wgt=;
val=y;
}
}st[];
int top;
int n;
lnt a[];
lnt b[];
int merge(int x,int y)
{
if(!x||!y)
return x+y;
if(l[x].val<l[y].val)
std::swap(x,y);
rrr=merge(rrr,y);
l[rrr].fa=x;
if(l[rrr].dis>l[lll].dis)
std::swap(lll,rrr);
l[x].dis=l[rrr].dis+;
return x;
}
int pop(int x)
{
return merge(lll,rrr);
}
int main()
{
// freopen("a.in","r",stdin);
// freopen("my.out","w",stdout);
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]),a[i]-=i;
st[++top]=seg(i,a[i]);
l[i].val=a[i];
while(top>&&st[top].val<st[top-].val)
{
int x=top-,y=top;
top--;
st[x].root=merge(st[x].root,st[y].root);
st[x].wgt+=st[y].wgt;
st[x].r=st[y].r;
while(st[x].wgt>((st[x].r-st[x].l+)/))
{
st[x].root=pop(st[x].root);
st[x].wgt--;
}
st[top].val=l[st[top].root].val;
}
}
lnt ans=;
for(int i=;i<=top;i++)
for(int j=st[i].l;j<=st[i].r;j++)
{
b[j]=st[i].val;
ans+=std::abs(a[j]-b[j]);
}
printf("%lld\n",ans);
return ;
}
BZOJ1367: [Baltic2004]sequence(左偏树)的更多相关文章
- bzoj1367 [Baltic2004]sequence 左偏树+贪心
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=1367 题解 先考虑条件为要求不下降序列(不是递增)的情况. 那么考虑一段数值相同的子段,这一段 ...
- 【BZOJ1367】[Baltic2004]sequence 左偏树
[BZOJ1367][Baltic2004]sequence Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sampl ...
- BZOJ1367 BOI2004Sequence(左偏树)
首先考虑把bi和ai同时减i,问题变为非严格递增.显然如果a是一个递减序列,b序列所有数都取其中位数最优.于是划分原序列使得每一部分递减,然后考虑合并相邻两段.如果前一段的中位数<=后一段的中位 ...
- bzoj 1367 [ Baltic 2004 ] sequence —— 左偏树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1367 好题啊!论文上的题: 论文上只给出了不下降序列的求法: 先考虑特殊情况,如果原序列上升 ...
- BZOJ1367 [Baltic2004]sequence 堆 左偏树
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1367 题意概括 Description Input Output 一个整数R 题解 http:// ...
- BZOJ1367 [Baltic2004]sequence 【左偏树】
题目链接 BZOJ1367 题解 又是一道神题,, 我们考虑一些简单的情况: 我们先假设\(b_i\)单调不降,而不是递增 对于递增序列\(\{a_i\}\),显然答案\(\{b_i\}\)满足\(b ...
- 【BZOJ 1367】 1367: [Baltic2004]sequence (可并堆-左偏树)
1367: [Baltic2004]sequence Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Ou ...
- 洛谷P4331 [BOI2004] Sequence 数字序列 [左偏树]
题目传送门 数字序列 题目描述 给定一个整数序列 a1,a2,⋅⋅⋅,an ,求出一个递增序列 b1<b2<⋅⋅⋅<bn ,使得序列 ai 和 bi 的各项之差的绝对 ...
- [BOI2004]Sequence 数字序列(左偏树)
PS:参考了黄源河的论文<左偏树的特点及其应用> 题目描述:给定一个整数序列\(a_1, a_2, - , a_n\),求一个递增序列\(b_1 < b_2 < - < ...
随机推荐
- android mvp高速开发框架介绍(dileber使用之小工具使用)
android mvp框架:dileber(https://github.com/dileber/dileber.git) 继续为大家介绍android mvp开源框架 dileber 官方交流qq群 ...
- 51nod-1273: 旅行计划
[传送门:51nod-1273] 简要题意: 给出一棵树,点数为n,现在你有一个旅行计划,从k城市出发,每天前往一个没去过的城市,并且旅途中经过的没有去过的城市尽可能的多(如果有2条路线,经过的没有去 ...
- hdoj--5567--sequence1(水题)
sequence1 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ...
- Windows 相关
Open the Windows Update troubleshooter If your computer is having problems finding and installing op ...
- python3.x学习笔记2(基础知识)
1.元组元组其实跟列表差不多,也是存一组数,只是它一旦创建,便不能在修改,所以又叫只读列表语法:names =('shgd','sjdh') 它只有两个方法,一个是count,一个是index 2.字 ...
- js一些常用方法
string 增加 IsNullorEmpty : String.prototype.IsNullOrEmpty = function (r) { if (r === undefined || ...
- 仿函数(functor)
仿函数(functor),就是使一个类的使用看上去像一个函数.其实现就是类中实现一个operator(),这个类就有了类似函数的行为,就是一个仿函数类了. In computer programmin ...
- Debian9.5 系统配置NFS配置说明
NFS是Network File System的缩写,即网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端可以通过挂载(mount)的方式将NFS ...
- session 存入 memcahce
<?php header('content-type:text/html;charset=utf-8'); class RedisSessionHandler{ public $ttl; //失 ...
- 企业级Nginx+Keepalived集群实战(双主架构)
随着Nginx在国内的发展潮流,越来越多的互联网公司都在使用Nginx,Nginx高性能.稳定性成为IT人士青睐的HTTP和反向代理服务器.Nginx负载均衡一般位于整个网站架构的最前端或者中间层,如 ...