1367: [Baltic2004]sequence

Time Limit: 20 Sec  Memory Limit: 64 MB
Submit: 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

论文中的例题,非常吼啊....思想巧妙

Code

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<cstring>
  6. using namespace std;
  7. int read()
  8. {
  9. int x=,f=; char ch=getchar();
  10. while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
  11. while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
  12. return x*f;
  13. }
  14. #define maxn 1000100
  15. long long ans;
  16. int n,data[maxn],root[maxn],L[maxn],R[maxn],cnt[maxn],tot;
  17. struct LeftTreeNode
  18. {
  19. int sz,son[maxn][],d[maxn],size[maxn],a[maxn];
  20. // LeftTreeNode ()
  21. // {
  22. // sz=0;memset(son,0,sizeof(son));memset(size,0,sizeof(size));
  23. // memset(cnt,0,sizeof(cnt));memset(a,0,sizeof(a));memset(d,0,sizeof(d));
  24. // }
  25. int Merge(int x,int y)
  26. {
  27. if (!x) return y;
  28. if (!y) return x;
  29. if (a[x]<a[y]) swap(x,y);
  30. son[x][]=Merge(son[x][],y);
  31. size[x]=size[son[x][]]+size[son[x][]]+;
  32. if (d[son[x][]]>d[son[x][]]) swap(son[x][],son[x][]);
  33. d[x]=d[son[x][]]+;
  34. return x;
  35. }
  36. int Push(int x)
  37. {
  38. a[++sz]=x; size[sz]=;
  39. son[sz][]=son[sz][]=d[sz]=;
  40. return sz;
  41. }
  42. int Pop(int x) {return Merge(son[x][],son[x][]);}
  43. int Top(int x) {return a[x];}
  44. int Size(int x) {return size[x];}
  45. }LTHeap;
  46. int main()
  47. {
  48. n=read();
  49. for (int i=; i<=n; i++) data[i]=read()-i;
  50. for (int i=; i<=n; i++)
  51. {
  52. tot++;
  53. root[tot]=LTHeap.Push(data[i]); cnt[tot]=; L[tot]=R[tot]=i;
  54. while (tot> && LTHeap.Top(root[tot])<LTHeap.Top(root[tot-]))
  55. {
  56. tot--;
  57. root[tot]=LTHeap.Merge(root[tot],root[tot+]); cnt[tot]+=cnt[tot+]; R[tot]=R[tot+];
  58. while (LTHeap.Size(root[tot])*>cnt[tot]+)
  59. root[tot]=LTHeap.Pop(root[tot]);
  60. }
  61. }
  62. for (int i=; i<=tot; i++)
  63. for (int j=L[i],top=LTHeap.Top(root[i]); j<=R[i]; j++)
  64. ans+=abs(data[j]-top);
  65. printf("%lld\n",ans);
  66. return ;
  67. }

被YveH发现了...

【BZOJ-1367】sequence 可并堆+中位数的更多相关文章

  1. BZOJ 1367: [Baltic2004]sequence [可并堆 中位数]

    1367: [Baltic2004]sequence Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 1111  Solved: 439[Submit][ ...

  2. BZOJ 1367([Baltic2004]sequence-左偏树+中位数贪心)

    1367: [Baltic2004]sequence Time Limit: 20 Sec   Memory Limit: 64 MB Submit: 521   Solved: 159 [ Subm ...

  3. bzoj 1367 - sequence

    Description 给定一个序列\(t_1,t_2,\cdots,t_n\),求一个递增序列\(z_1<z_2<...<z_n\), 使得 \(R=|t_1−z_1|+|t_2− ...

  4. BZOJ 1367 [Baltic2004]sequence 解题报告

    BZOJ 1367 [Baltic2004]sequence Description 给定一个序列\(t_1,t_2,\dots,t_N\),求一个递增序列\(z_1<z_2<\dots& ...

  5. 【BZOJ 1367】 1367: [Baltic2004]sequence (可并堆-左偏树)

    1367: [Baltic2004]sequence Description Input Output 一个整数R Sample Input 7 9 4 8 20 14 15 18 Sample Ou ...

  6. BZOJ 1367 [Baltic2004]sequence (可并堆)

    题面:BZOJ传送门 题目大意:给你一个序列$a$,让你构造一个递增序列$b$,使得$\sum |a_{i}-b_{i}|$最小,$a_{i},b_{i}$均为整数 神仙题.. 我们先考虑b不递减的情 ...

  7. bzoj 1367: [Baltic2004]sequence

    1367: [Baltic2004]sequence Time Limit: 20 Sec  Memory Limit: 64 MB Description Input Output 一个整数R Sa ...

  8. bzoj 1367 [ Baltic 2004 ] sequence —— 左偏树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1367 好题啊!论文上的题: 论文上只给出了不下降序列的求法: 先考虑特殊情况,如果原序列上升 ...

  9. sequence(bzoj 1367)

    Description Input Output 一个整数R Sample Input 794820141518 Sample Output 13 HINT 所求的Z序列为6,7,8,13,14,15 ...

随机推荐

  1. 用mysql触发器实现log记录

    首先建立两张测试用表 mysql> desc pay; +-------+---------------+------+-----+---------+----------------+ | F ...

  2. Java设计模式之-----策略模式

    首先,我们来看下策略模式的概念.一般的解释如下:     策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化.(原文:The St ...

  3. 数据表格 - DataGrid - 列表显示

    <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding=& ...

  4. 10 个迅速提升你 Git 水平的提示

    1. Git自动补全 假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情.为了解决这个问题,你可以启用Git的自动补全功能,完成这项工作仅需要几分钟. 为了得到这个脚本 ...

  5. Python 操作 MongoDB

    原文 这篇文章主要介绍了使用Python脚本操作MongoDB的教程,MongoDB作为非关系型数据库得到了很大的宣传力度,而市面上的教程一般都是讲解JavaScript的脚本操作,本文则是基于Pyt ...

  6. [MetaHook] Quake FMOD player demo

    CFMOD.h #ifndef CFMOD_H #define CFMOD_H #include "qfmod.h" struct Sound_t { char *pszName; ...

  7. list使用例子(转)

    例子: 在vs2010中创建一个winform的解决方案,然后定义一个类Person,Person.cs 的代码如下: using System;using System.Collections.Ge ...

  8. oracle 11g的企业管理器

    oracle 11g的企业管理器不同于其他版本,它是B/S的,默认登录为:https://localhost:1158/em,但我试了IE8跟360浏览器都不行,谷歌浏览器是可以访问的

  9. RMQ(ST算法)

    RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j<=n),返回数列a中下标在i ...

  10. Theano2.1.3-基础知识之更多的例子

    来自:http://deeplearning.net/software/theano/tutorial/examples.html More Examples 现在,是时候开始系统的熟悉theano的 ...