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 < - < ...
随机推荐
- Oracle中set serveroutput on介绍
定义 set serveroutpu on是使oracle可以使用自带的输出方法 dbms_output.put_line('XX'); 使用范围 使用于PL/SQL COMMAND WINDOW,S ...
- oracle树操作(select .. start with .. connect by .. prior)
oracle中的递归查询能够使用:select .. start with .. connect by .. prior 以下将会讲述oracle中树形查询的经常使用方式.仅仅涉及到一张表. star ...
- 转:app store 注册账号生成证书上传app完整的教程
app store为开发者提供四种类型的申请: 个人ios开发者计划$99/年 公司ios开发者计划$99/年 企业ios开发者计划$299/年 高校ios开发者计划免费 在这里主要介绍一下公司ios ...
- Android清单文件具体解释(六) ---- <activity>节点的属性
1.android:allowTaskReparenting android:allowTaskReparenting是一个任务调整属性,它表明当这个任务又一次被送到前台时,该应用程序所定义的Acti ...
- GraphicsMagick java.io.FileNotFoundException: gm 错误解决办法
GraphicsMagick java.io.FileNotFoundException: gm 解决办法, 方法一: ProcessStarter.setGlobalSearchPath(" ...
- 小贝_redis list类型学习
redis list类型 一.查看list类型的命令 二.list命令具体解释 一.查看list类型的命令 1.在终端数据 help @list 127.0.0.1:6379>help @li ...
- C# Winform 模拟QQ新闻弹出框
一开始做的时候,觉得这个太简单了.真心做的时候还是遇到了不少的坑啊. 1)循环播放新闻内容,建议使用showdialog(),不要用show(),不太好控制前后之间的停顿. 2)窗口的初始位置为有下角 ...
- hdu1978 How many ways
How many ways Problem Description 这是一个简单的生存游戏,你控制一个机器人从一个棋盘的起始点(1,1)走到棋盘的终点(n,m).游戏的规则描述如下: 机器人一开始在棋 ...
- java中"".equals(A)与A.equals("")一样不?
不一样如果a为nulla = null;a.equals("")出错nullPointerException如果写为"".equals(a)-->就可以防 ...
- OpenGL编程逐步深入(七)旋转变换
准备知识 这一节我们来看一下旋转变换.旋转变换指的是给我们一个指点的点和角度,我们需要绕着过该点的轴线將对象旋转对应的角度.这里我们只改变X/Y/Z中的两个分量,第三个分量保持不变.这意味着我们的图形 ...