【BZOJ-1367】sequence 可并堆+中位数
1367: [Baltic2004]sequence
Time Limit: 20 Sec Memory Limit: 64 MB
Submit: 932 Solved: 348
[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
Source
Solution
论文中的例题,非常吼啊....思想巧妙
Code
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- #include<cstring>
- 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;
- }
- #define maxn 1000100
- long long ans;
- int n,data[maxn],root[maxn],L[maxn],R[maxn],cnt[maxn],tot;
- struct LeftTreeNode
- {
- int sz,son[maxn][],d[maxn],size[maxn],a[maxn];
- // LeftTreeNode ()
- // {
- // sz=0;memset(son,0,sizeof(son));memset(size,0,sizeof(size));
- // memset(cnt,0,sizeof(cnt));memset(a,0,sizeof(a));memset(d,0,sizeof(d));
- // }
- int Merge(int x,int y)
- {
- if (!x) return y;
- if (!y) return x;
- if (a[x]<a[y]) swap(x,y);
- son[x][]=Merge(son[x][],y);
- size[x]=size[son[x][]]+size[son[x][]]+;
- if (d[son[x][]]>d[son[x][]]) swap(son[x][],son[x][]);
- d[x]=d[son[x][]]+;
- return x;
- }
- int Push(int x)
- {
- a[++sz]=x; size[sz]=;
- son[sz][]=son[sz][]=d[sz]=;
- return sz;
- }
- int Pop(int x) {return Merge(son[x][],son[x][]);}
- int Top(int x) {return a[x];}
- int Size(int x) {return size[x];}
- }LTHeap;
- int main()
- {
- n=read();
- for (int i=; i<=n; i++) data[i]=read()-i;
- for (int i=; i<=n; i++)
- {
- tot++;
- root[tot]=LTHeap.Push(data[i]); cnt[tot]=; L[tot]=R[tot]=i;
- while (tot> && LTHeap.Top(root[tot])<LTHeap.Top(root[tot-]))
- {
- tot--;
- root[tot]=LTHeap.Merge(root[tot],root[tot+]); cnt[tot]+=cnt[tot+]; R[tot]=R[tot+];
- while (LTHeap.Size(root[tot])*>cnt[tot]+)
- root[tot]=LTHeap.Pop(root[tot]);
- }
- }
- for (int i=; i<=tot; i++)
- for (int j=L[i],top=LTHeap.Top(root[i]); j<=R[i]; j++)
- ans+=abs(data[j]-top);
- printf("%lld\n",ans);
- return ;
- }
被YveH发现了...
【BZOJ-1367】sequence 可并堆+中位数的更多相关文章
- BZOJ 1367: [Baltic2004]sequence [可并堆 中位数]
1367: [Baltic2004]sequence Time Limit: 20 Sec Memory Limit: 64 MBSubmit: 1111 Solved: 439[Submit][ ...
- BZOJ 1367([Baltic2004]sequence-左偏树+中位数贪心)
1367: [Baltic2004]sequence Time Limit: 20 Sec Memory Limit: 64 MB Submit: 521 Solved: 159 [ Subm ...
- bzoj 1367 - sequence
Description 给定一个序列\(t_1,t_2,\cdots,t_n\),求一个递增序列\(z_1<z_2<...<z_n\), 使得 \(R=|t_1−z_1|+|t_2− ...
- BZOJ 1367 [Baltic2004]sequence 解题报告
BZOJ 1367 [Baltic2004]sequence Description 给定一个序列\(t_1,t_2,\dots,t_N\),求一个递增序列\(z_1<z_2<\dots& ...
- 【BZOJ 1367】 1367: [Baltic2004]sequence (可并堆-左偏树)
1367: [Baltic2004]sequence Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Ou ...
- BZOJ 1367 [Baltic2004]sequence (可并堆)
题面:BZOJ传送门 题目大意:给你一个序列$a$,让你构造一个递增序列$b$,使得$\sum |a_{i}-b_{i}|$最小,$a_{i},b_{i}$均为整数 神仙题.. 我们先考虑b不递减的情 ...
- bzoj 1367: [Baltic2004]sequence
1367: [Baltic2004]sequence Time Limit: 20 Sec Memory Limit: 64 MB Description Input Output 一个整数R Sa ...
- bzoj 1367 [ Baltic 2004 ] sequence —— 左偏树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1367 好题啊!论文上的题: 论文上只给出了不下降序列的求法: 先考虑特殊情况,如果原序列上升 ...
- sequence(bzoj 1367)
Description Input Output 一个整数R Sample Input 794820141518 Sample Output 13 HINT 所求的Z序列为6,7,8,13,14,15 ...
随机推荐
- 用mysql触发器实现log记录
首先建立两张测试用表 mysql> desc pay; +-------+---------------+------+-----+---------+----------------+ | F ...
- Java设计模式之-----策略模式
首先,我们来看下策略模式的概念.一般的解释如下: 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The St ...
- 数据表格 - DataGrid - 列表显示
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding=& ...
- 10 个迅速提升你 Git 水平的提示
1. Git自动补全 假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情.为了解决这个问题,你可以启用Git的自动补全功能,完成这项工作仅需要几分钟. 为了得到这个脚本 ...
- Python 操作 MongoDB
原文 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面上的教程一般都是讲解JavaScript的脚本操作,本文则是基于Pyt ...
- [MetaHook] Quake FMOD player demo
CFMOD.h #ifndef CFMOD_H #define CFMOD_H #include "qfmod.h" struct Sound_t { char *pszName; ...
- list使用例子(转)
例子: 在vs2010中创建一个winform的解决方案,然后定义一个类Person,Person.cs 的代码如下: using System;using System.Collections.Ge ...
- oracle 11g的企业管理器
oracle 11g的企业管理器不同于其他版本,它是B/S的,默认登录为:https://localhost:1158/em,但我试了IE8跟360浏览器都不行,谷歌浏览器是可以访问的
- RMQ(ST算法)
RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j<=n),返回数列a中下标在i ...
- Theano2.1.3-基础知识之更多的例子
来自:http://deeplearning.net/software/theano/tutorial/examples.html More Examples 现在,是时候开始系统的熟悉theano的 ...