P1459车展

 
 

描述

遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展。车库里共有n辆车,从左到右依次编号为1,2,…,n,每辆车都有一个展台。刚开始每个展台都有一个唯一的高度h[i]。主管已经列好一张单子:
L1 R1
L2 R2

Lm Rm
单子上的(Li,Ri)表示第i次车展将要展出编号从Li到Ri的车。

为了更加美观,展览时需要调整展台的高度,使参展所有展台的高度相等。展台的高度增加或减少1都需花费1秒时间。由于管理员只有一个人,所以只好对每个展台依次操作。每次展览结束后,展台高度自动恢复到初始高度。

请告诉管理员为了举办所有展览,他最少需要花多少时间将展台调整好。

格式

输入格式

第一行为两个正整数n、m。

第二行共n个非负整数,表示第i辆车展台的高度h[i]。

接下来m行每行2个整数Li、Ri(Li≤Ri)。

输出格式

一个正整数,调整展台总用时的最小值。

样例1

样例输入1[复制]

 
  1. 6 4
  2. 4 1 2 13 0 9
  3. 1 5
  4. 2 6
  5. 3 4
  6. 2 2

样例输出1[复制]

 
  1. 48

限制

各个测试点1s

提示

对于50%的数据 n≤500,m≤1000;
对于80%的数据 n≤1000,m≤100000;
对于100%的数据n≤1000,m≤200000;
答案在2^64以内。

附上一组测试数据

输入

10 10 
28 5 10 16 24 14 7 15 20 0 
1 7 
2 4 
9 10 
9 10 
8 9 
3 6 
7 10 
3 9 
4 7 
6 10

输出

222

AC代码1:

消耗时间 2762 ms
消耗内存 572 KiB
  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<iostream>
  5. #define ll long long
  6. using namespace std;
  7. const int N=1e3+;
  8. int n,m,a[N],d[N];
  9. ll tot=;
  10. inline const int read(){
  11. register int x=,f=;
  12. register char ch=getchar();
  13. while(ch>''||ch<''){if(ch=='-')f=-;ch=getchar();}
  14. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  15. return x*f;
  16. }
  17. inline int abs(int x){
  18. return x>?x:-x;
  19. }
  20. int main(){
  21. n=read();m=read();
  22. for(int i=;i<=n;i++) a[i]=read();
  23. memcpy(d,a,sizeof a);
  24. for(int i=,l,r,mid;i<=m;i++){
  25. l=read();r=read();mid=l+r>>;
  26. nth_element(a+l,a+mid,a+r+);
  27. ll t1=;
  28. for(int j=l;j<=r;j++) t1+=abs(a[j]-a[mid]);
  29. tot+=t1;
  30. memcpy(a,d,sizeof d);
  31. }
  32. cout<<tot;
  33. return ;
  34. }

AC代码2:

消耗时间 576 ms
消耗内存 1564 KiB
  1. #include<cstdio>
  2. #include<algorithm>
  3. #define ll long long
  4. using namespace std;
  5. const int N=<<;
  6. const int M=N*;
  7. int sum[M],ls[M],rs[M];
  8. int T[N],num[N],a[N],san[N],tot;
  9. inline const int read(){
  10. register int x=,f=;
  11. register char ch=getchar();
  12. while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
  13. while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
  14. return x*f;
  15. }
  16. void build(int &rt,int l,int r){
  17. rt=++tot;
  18. sum[rt]=;
  19. if(l==r) return ;
  20. int mid=(l+r>>);
  21. build(ls[rt],l,mid);
  22. build(rs[rt],mid+,r);
  23. }
  24. void updata(int &rt,int last,int p,int l,int r){
  25. rt=++tot;
  26. ls[rt]=ls[last];
  27. rs[rt]=rs[last];
  28. sum[rt]=sum[last]+;
  29. if(l==r) return ;
  30. int mid=(l+r>>);
  31. if(p<=mid)
  32. updata(ls[rt],ls[last],p,l,mid);
  33. else
  34. updata(rs[rt],rs[last],p,mid+,r);
  35. }
  36. int query(int l,int r,int x,int y,int k){
  37. if(l==r) return l;
  38. int mid=(l+r>>);
  39. int cnt=sum[ls[y]]-sum[ls[x]];
  40. if(k<=cnt)
  41. return query(l,mid,ls[x],ls[y],k);
  42. else
  43. return query(mid+,r,rs[x],rs[y],k-cnt);
  44. }
  45. ll total;
  46. int main(){
  47. int n=read(),m=read();
  48. for(int i=;i<=n;i++) san[i]=num[i]=a[i]=read();
  49. stable_sort(san+,san+n+);
  50. int cnt=unique(san+,san+n+)-(san+);
  51. build(T[],,cnt);
  52. for(int i=;i<=n;i++) num[i]=lower_bound(san+,san+cnt+,num[i])-san;
  53. for(int i=;i<=n;i++) updata(T[i],T[i-],num[i],,cnt);
  54. for(int i=;i<=m;i++){
  55. int x=read(),y=read(),k=(y-x>>)+;
  56. int id=query(,cnt,T[x-],T[y],k);
  57. int smid=san[id];
  58. ll t1=;
  59. for(int j=x;j<=y;j++) t1+=abs(a[j]-smid);
  60. total+=t1;
  61. }
  62. printf("%lld",total);
  63. return ;
  64. }

vijos P1459车展的更多相关文章

  1. vijos P1459 车展(Treap,中位数)

    P1459车展   描述 遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展.车库里共有n辆车,从左到右依次编号为1,2,…,n,每辆车都有一个展台.刚开始每个展台都有一个唯一的 ...

  2. Vijos P1459 车展 treap求任意区间中位数

    描述 遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展.车库里共有n辆车,从左到右依次编号为1,2,…,n,每辆车都有一个展台.刚开始每个展台都有一个唯一的高度h[i].主管已 ...

  3. Vijos P1459 车展 (treap 任意区间中位数)

    题面: 描述 遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展.车库里共有n辆车,从左到右依次编号为1,2,…,n,每辆车都有一个展台.刚开始每个展台都有一个唯一的高度h[i] ...

  4. 车展(vijos P1459)

    描述 遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展.车库里共有n辆车,从左到右依次编号为1,2,…,n,每辆车都有一个展台.刚开始每个展台都有一个唯一的高度h[i].主管已 ...

  5. Vijos——T1406 拉力赛

    https://vijos.org/p/1460 描述 车展结束后,游乐园决定举办一次盛大的山道拉力赛,平平和韵韵自然也要来参加大赛. 赛场上共有n个连通的计时点,n-1条赛道(构成了一棵树).每个计 ...

  6. 【BZOJ 1061】【Vijos 1825】【NOI 2008】志愿者招募

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 https://vijos.org/p/1825 直接上姜爷论文... #include< ...

  7. vijos P1915 解方程 加强版

    背景 B酱为NOIP 2014出了一道有趣的题目, 可是在NOIP现场, B酱发现数据规模给错了, 他很伤心, 哭得很可怜..... 为了安慰可怜的B酱, vijos刻意挂出来了真实的题目! 描述 已 ...

  8. vijos P1780 【NOIP2012】 开车旅行

    描述 小\(A\)和小\(B\)决定利用假期外出旅行,他们将想去的城市从\(1\)到\(N\)编号,且编号较小的城市在编号较大的城市的西边,已知各个城市的海拔高度互不相同,记城市\(i\)的海拔高度为 ...

  9. 【BZOJ 2541】【Vijos 1366】【CTSC 2000】冰原探险

    http://www.lydsy.com/JudgeOnline/problem.php?id=2541 https://vijos.org/p/1366 loli秘制大爆搜_(:з」∠)_坑了好久啊 ...

随机推荐

  1. 6.10---mybatis中两张表查询数据dao层

  2. 实现div毛玻璃背景

    毛玻璃效果 ios里毛玻璃效果的使用非常多,本文介绍一个实现div毛玻璃背景的方法 CSS3 Filter CSS3的Filter主要用在图像的特效处理上,默认值为none,还有以下备选项:   1. ...

  3. Serializable和Parcelable的简单介绍

    Serializable和Pacelable接口可以完成对象的序列化过程,当我们需要通过Intent和Binder传输数据时就需要使用Parcelable或者Serializable. Seriali ...

  4. SQL基本操作——ALTER

    ALTER TABLE 语句用于在已有的表中添加.修改或删除列. Persons 表: ID LastName FirstName Address City 1 Adams John Oxford S ...

  5. (转)Hibernate的一级缓存

    http://blog.csdn.net/yerenyuan_pku/article/details/70148567 Hibernate的一级缓存 Hibernate的一级缓存就是指Session缓 ...

  6. cstring 转 string

    都通过基本类型来转换即可:CString可以转换为基本类型LPCTSTR,LPCTSTR根据项目编码可以是const char*或者const wchar_t*:string可以用c_str()转换为 ...

  7. SpringMVC参数绑定、Post乱码解决方法

    从客户端请求key/value数据,经过参数绑定,将key/value数据绑定到controller方法的形参上. springmvc中,接收页面提交的数据是通过方法形参来接收.而不是在control ...

  8. select 如何将文本居中

    开始测试了几种方式但是结果都是失败的,最后测试一种方式终于成功了,所以做下笔记: select{ width: 3.2rem; height: 1.2rem; border-radius: 0.6re ...

  9. Chat Group gym101775A(逆元,组合数)

    传送门:Chat Group(gym101775A) 题意:一个宿舍中又n个人,最少k(k >= 3)个人就可以建一个讨论组,问最多可以建多少个不同的讨论组. 思路:求组合数的和,因为涉及除法取 ...

  10. 发现:Click事件也能获取鼠标单击的坐标

    按照MSDN的说明以及平时的习惯,我们要获取鼠标单击时的相对坐标,都会使用MouseClick等事件,今天,偶然发现,原来Click事件也可以. /* 惊天地泣鬼神的考古业绩. * 原来Cilck事件 ...