日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

牛客网 【每日一题】7月24日题目精讲—小A的柱状图

發布時間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客网 【每日一题】7月24日题目精讲—小A的柱状图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

鏈接:

文章目錄

    • 題目描述
    • 題解:
    • 代碼:

小A的柱狀圖

時間限制:C/C++ 1秒,其他語言2秒 空間限制:C/C++ 262144K,其他語言524288K 64bit IO Format: %lld

題目描述

柱狀圖是有一些寬度相等的矩形下端對齊以后橫向排列的圖形,但是小A的柱狀圖卻不是一個規范的柱狀圖,它的每個矩形下端的寬度可以是不相同的一些整數,分別為a[i]a[i],每個矩形的高度是h[i]h[i],現在小A只想知道,在這個圖形里面包含的最大矩形面積是多少。

輸入描述:

一行一個整數N,表示長方形的個數 接下來一行N個整數表示每個長方形的寬度 接下來一行N個整數表示每個長方形的高度

輸出描述:
一行一個整數,表示最大的矩形面積
示例1
輸入
復制

7 1 1 1 1 1 1 1 2 1 4 5 1 3 3

輸出
復制

8

說明
樣例如圖所示,包含的最大矩形面積是8
備注:
1≤n≤1e6,1≤a[i]≤100,1≤h[i]≤1e9

題解:

單調棧問題
我們可以用一個單調棧來維護每個矩陣的高度和寬度,
當前矩陣高于棧頂,進棧
當前矩陣a小于棧頂時,直到棧為空或者棧頂矩形的高度比當前矩形小。在出棧過程中,我們累計被彈出的矩形的寬度和。每彈出一個矩形,就用他的高度(他指被彈出的矩陣)乘上累計的寬度取更新答案,因為每次彈出的高度要比上次彈出的小,相當于依次求以從左往右以每個矩陣高的面積(如圖所示)。整個出棧過程結束后,我們把一個高度為當前矩陣高度,寬度為累計值的新矩陣入棧。

全部掃描過后,我們要將棧內剩余矩陣依次彈出,并利用相同的方法更新答案。

代碼:

#include<bits/stdc++.h> #include<stack> using namespace std; typedef long long ll; const int maxn=1e6+4; int a[maxn]; ll h[maxn]; stack<int> s; stack<int> w;//寬度 int main() {int n;cin>>n;for(int i=1;i<=n;i++)cin>>a[i];for(int i=1;i<=n;i++)cin>>h[i];h[n+1]=0;ll ans=0;s.push(0);//先放一個0 w.push(0); for(int i=1;i<=n;i++){if(h[i]>s.top()){s.push(h[i]);w.push(a[i]);}else {ll tot=0;while(!s.empty()&&s.top()>=h[i]){tot+=w.top();ans=max(ans,tot*s.top());w.pop();s.pop();}s.push(h[i]);w.push(tot+a[i]);}}cout<<ans;return 0; }

總結

以上是生活随笔為你收集整理的牛客网 【每日一题】7月24日题目精讲—小A的柱状图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。