博客
关于我
(连续的矩形)HDU - 1506
阅读量:279 次
发布时间:2019-03-03

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

题意:7 2 1 4 5 1 3 3  直接讲数据 :给出7个矩形的高,底长都为1,求最大的连通的矩形块的面积

思路:如果暴力的话肯定超时,有一个特别巧妙的预处理,如果我们知道每一个矩形的左右两边能延伸到哪就好了,这相当于一个并查集:如果我找到了 i ,并且小于等于第 i-1 的高度,那 i-1 的左边界就赋给 i ,向递归一样找下去,直到最左边或者 i 的高度小于左边界的左边。右边界也是这样。

注意:特别注意一下代码中数组的初始化还有最后边界相减加一.

#include
long long f[100010],l[100010],r[100010],n;int main(){ while(~scanf("%lld",&n)&&n) { for(int i=1;i<=n;i++) scanf("%lld",&f[i]); for(int i=1;i<=n;i++) l[i]=r[i]=i;//i点的左右边界初始化为本身 f[0]=-1,f[n+1]=-1;//端点初始化 //相当于并查集 for(int i=1;i<=n;i++) { while(f[i]<=f[l[i]-1])//f[i]与当前边界的前面的点比较 若小于等于 l[i]=l[l[i]-1];//f[i]的左边界l[i]为前面的点的边界 直到小于f[i]为止 } for(int i=n;i>=1;i--) { while(f[i]<=f[r[i]+1])//f[i]与f[i]当前边界的后一个数比较 若小于等于 r[i]=r[r[i]+1];//前面的数的右边界r[r[i]-1]更新最右边界 } long long sum=0,ans=0; for(int i=1;i<=n;i++) { sum=(r[i]-l[i]+1)*f[i];//边界相减加 1 if(ans

转载地址:http://ygsl.baihongyu.com/

你可能感兴趣的文章
最全的优秀【编程书籍】推荐列表!
查看>>
为何二战考生成功率远远大于应届?
查看>>
哈尔滨工业大学2019初试真题 已更新在GitHub
查看>>
计算机专业【本科生】毕业还不如【专科生】?
查看>>
暑假即将过去一半,英语词汇没记住多少怎么办?
查看>>
2020考研数学一、二、三大纲原文汇总
查看>>
考研408联盟新添一所985!某知名大学专业课改用408!
查看>>
复旦女博士被“送”5篇论文后要分手,代写情夫自杀?复旦大学深夜回应!
查看>>
最有钱的大学是哪个?教育部直属高校公布2018年决算
查看>>
408的逆袭!武汉大学所有计算机/软件专业都改为408!
查看>>
这九种数学题,你会做吗?
查看>>
408又多一所学校!广东某大学专业课改为408!
查看>>
难以置信!疯狂刷政治题抵不过这些小技巧
查看>>
【报名问题】考研现场确认时发现报考点选错了怎么办?
查看>>
100000+人体验过后都说:这TM绝对是最变态的英语学习方法……
查看>>
广东省将新增一所“中科大”,办学规模初定1万人!
查看>>
提醒 | 未下载打印准考证的考生,不能参加2020年考研初试
查看>>
【考研数学】高数公式总结
查看>>
2020考研,弃考的情况普遍吗?
查看>>
【21考研】英语一与英语二的区别
查看>>