国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

廣告印刷

2019-11-14 09:23:05
字體:
來源:轉載
供稿:網友

【題目描述】 最近,afy決定給TOJ印刷廣告,廣告牌是刷在城市的建筑物上的,城市里有緊靠著的N個建筑。afy決定在上面找一塊盡可能大的矩形放置廣告牌。我們假設每個建筑物都有一個高度,從左到右給出每個建筑物的高度H1,H2…HN,且1<=Hi<=1,000,000,000,并且我們假設每個建筑物的寬度均為1。要求輸出廣告牌的最大面積。 【輸入格式】 第一行是一個數n (n<= 400,000 ) 第二行是n個數,分別表示每個建筑物高度H1,H2…HN,且1<=Hi<=1,000,000,000。 【輸出格式】 輸出文件 ad.out 中一共有一行,表示廣告牌的最大面積。 【 樣例輸入】 6 5 8 4 4 8 4 【樣例輸出】 24 【分析】 首先可以想到,在廣告覆蓋的樓房中,最矮的樓房(并不是指所有樓房中最矮的那個)一定被廣告完全覆蓋了。所以可以枚舉最矮的樓房,求出向左、向右分別可以延伸多遠(即大于等于該樓房),然后打擂臺即可。 用單調隊列預處理向左、向右分別延伸的距離可以優化程序。

#include<iostream>#include<cstdio>using namespace std;#define MAXN 400000#define LL long longint h[400010];int n;int Queue[400010];int L[400010],R[400010];int main(){ cin>>n; int i; for (i=1;i<=n;i++) cin>>h[i]; h[0]=h[n+1]=-1; Queue[0]=0; int Head=0,Tail=1; for (i=1;i<=n;i++) { while (Head<Tail && h[i]<=h[Queue[Tail-1]]) Tail--; L[i]=i-Queue[Tail-1]-1; Queue[Tail++]=i; } Queue[0]=n+1; Head=0,Tail=1; for (i=n;i>=1;i--) { while (Head<Tail && h[i]<=h[Queue[Tail-1]]) Tail--; R[i]=Queue[Tail-1]-i-1; Queue[Tail++]=i; } long long MaxArea=0; for (i=1;i<=n;i++) { long long Area=(L[i]+R[i]+1)*h[i]; if (Area>MaxArea) MaxArea=Area; } cout<<MaxArea;}
上一篇:模板方法模式

下一篇:算法訓練 最短路

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 金华市| 台山市| 东方市| 德惠市| 常州市| 白城市| 阿尔山市| 蓬溪县| 景德镇市| 金堂县| 青田县| 错那县| 多伦县| 香港| 平潭县| 如东县| 扎鲁特旗| 星座| 榆社县| 绥芬河市| 昆山市| 石棉县| 台湾省| 合江县| 江都市| 宝鸡市| 东源县| 六安市| 清镇市| 海晏县| 乐业县| 麦盖提县| 易门县| 玛曲县| 文化| 巧家县| 永康市| 苍梧县| 绥化市| 澎湖县| 涡阳县|