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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JZOJ 1220. Pla

發(fā)布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 1220. Pla 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Description

在某條街上有著這么一行比較奇怪的建筑物:每棟建筑物都是一個矩形,而且他們是一
個挨著一個的。每棟建筑物都有它的寬度和高度。
Task:現(xiàn)在從左到右給出N 棟建筑物的信息。其中每棟建筑物的信息包括它的寬度和
高度。然后現(xiàn)在交給你一個刷墻任務(wù):你每一次刷墻的形狀都必須是一個矩形。問你最少需
要多少次才能把所有建筑物都刷完?

Input

輸入文件的第一行有一個整數(shù)N(1N106)。
接下來有N 行,每行有兩個整數(shù)Wi 和Hi(i,Hi231?1,分別表示每棟建筑物
的寬度和高度。
注意,建筑物是從左到右一個緊挨著一個的。如果你還不明白這句話是什么意思,那么
就請看樣例的圖示吧!!!!

Output

輸出文件僅包含一個整數(shù),表示你最少需要多少次才能完成這次刷墻任務(wù)。

Sample Input

5

1 2

1 3

2 2

2 5

1 4

Sample Output

4

Data Constraint

Hint

數(shù)據(jù)約定:
對于40%的數(shù)據(jù),1N5000
對于80%的數(shù)據(jù),1N250000
對于100%的數(shù)據(jù),1N106

Solution

  • 觀察題目,可以發(fā)現(xiàn)一個神奇的性質(zhì):

  • 一棟建筑物的寬是毫無作用的!!!,與之可以直接視為 1 !

  • 為什么呢?因為在同一棟建筑物中,高相等,原來怎么刷,就還是怎么刷。

  • 那么問題就轉(zhuǎn)化成簡單的單調(diào)棧——粉刷柵欄問題了!

  • 維護一個遞增的單調(diào)棧,按高度進行

  • 當這一高度比前一高度低時,就不斷彈棧,同時答案 +1 ,直到保持單調(diào)

  • 如此不斷進行,最后再加上棧中元素個數(shù)即可!

  • 這樣時間復(fù)雜度為 O(N) ,輕松 AC !

Code

#include<cstdio> using namespace std; int ans,top; int stack[1000001]; inline int read() {int data=0; char ch=0;while(ch<'0' || ch>'9') ch=getchar();while(ch>='0' && ch<='9') data=data*10+ch-'0',ch=getchar();return data; } int main() {int n=read();for(int i=1;i<=n;i++){int x=read(),y=read();while(y<stack[top]) top--,ans++;while(y==stack[top]) top--;stack[++top]=y;}printf("%d",ans+top);return 0; }

總結(jié)

以上是生活随笔為你收集整理的JZOJ 1220. Pla的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。