博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Vijos1459 车展 (数学)
阅读量:6315 次
发布时间:2019-06-22

本文共 2110 字,大约阅读时间需要 7 分钟。

 

描述

遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办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

 
6 44 1 2 13 0 91 52 63 42 2

样例输出1

 
48

限制

各个测试点1s

提示

对于50%的数据 n≤500,m≤1000;

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

来源

birdor

 

分析可知,将高度都调整成区间中位数时,代价最小。

枚举i作为中心,向两边扩展序列。

先扩展左边,用链表记录每个“大于a[i]的数比小于a[i]的数多x”的位置po1。

再扩展右边,用右边的每个“大于a[i]的数比小于a[i]的数少x”的位置po2,匹配之前左边记录的位置,则mid[po1][po2]=i

之后O(n^2)暴力累加调整高度的花费。

 

1 /*by SilverN*/ 2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 using namespace std; 9 const int mxn=1010;10 int read(){11 int x=0,f=1;char ch=getchar();12 while(ch<'0' || ch>'9'){ if(ch=='-')f=-1;ch=getchar();}13 while(ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}14 return x*f;15 }16 int pre[mxn],id[mxn],m[mxn<<2];17 int mid[mxn][mxn];18 int a[mxn];19 int n,Q;20 int main(){21 n=read();Q=read();22 int i,j;23 for(i=1;i<=n;i++){a[i]=read();}24 for(i=1;i<=n;i++){25 memset(id,0,sizeof id);26 memset(m,-1,sizeof m);27 memset(pre,0,sizeof pre);28 int x=0,d=0,cnt=1;29 for(j=i;j;j--){30 if(a[j]>a[i])d++;31 else x++;32 id[cnt]=j;33 pre[cnt]=m[d-x+mxn];34 m[d-x+mxn]=cnt++;35 }36 d=0;x=-1;37 for(j=i;j<=n;j++){38 if(a[j]>a[i])d++;39 else x++;40 for(int k=m[x-d+mxn];k!=-1;k=pre[k]){41 if( (j-id[k]+1)%2==0 )mid[id[k]][j]=a[i];42 }43 for(int k=m[x-d-1+mxn];k!=-1;k=pre[k]){44 if( (j-id[k])%2==0 )mid[id[k]][j]=a[i];45 }46 }47 }48 int st,ed;49 long long ans=0;50 while(Q--){51 st=read();ed=read();52 long long res=0;53 // printf("mid:%d\n",mid[st][ed]);54 for(i=st;i<=ed;i++)res+=abs(a[i]-mid[st][ed]);55 // printf("%d\n",res);56 ans+=res;57 }58 printf("%lld\n",ans);59 return 0;60 }

 

转载于:https://www.cnblogs.com/SilverNebula/p/6028754.html

你可能感兴趣的文章
AOP动态代理
查看>>
Yii2.0 下的 load() 方法的使用
查看>>
华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root
查看>>
[转] ReactNative Animated动画详解
查看>>
DNS原理及其解析过程
查看>>
没想到cnblog也有月经贴,其实C#值不值钱不重要。
查看>>
【转】LUA内存分析
查看>>
[转] Entity Framework Query Samples for PostgreSQL
查看>>
软件需求分析的重要性
查看>>
UVA465:Overflow
查看>>
HTML5-placeholder属性
查看>>
Android选择本地图片过大程序停止的经历
查看>>
poj 2187:Beauty Contest(旋转卡壳)
查看>>
《Flask Web开发》里的坑
查看>>
Python-库安装
查看>>
Git笔记
查看>>
普通人如何从平庸到优秀,在到卓越
查看>>
SLAM数据集
查看>>
c#学习笔记05——数组&集合
查看>>
【图论算法】Dijstra&BFS
查看>>