NOIP普及組模擬賽3 投影 skyline

2022-09-07 14:18:09 字數 1583 閱讀 4765

投影(skyline)

(file io): input:skyline.in output:skyline.out

時間限制: 1000 ms 空間限制: 262144 kb 具體限制

goto problemset

題目描述

一天你對著眼前的景物拍了一張照,這個相機很特別,有建築物的地方顯示「x」,沒有建築物的地方顯示為「.」,假設每個建築都是塊狀的,**長w(1<=w<=1,000,000),用n(1<=n<=50,000)對平面座標(x,y)( 1 <= x <= w, 0 <= y <= 500,000)描述**中建築物高度發生變化的位置,你的任務是計算出最少需要多少個建築才能形成該**。

如下圖:

輸入第一行: 兩個空格隔開的整數n,w;

第2到n+1行:兩個空格隔開的整數x和y,表示發生改變的點的座標。輸入中x是嚴格遞增的而且第1個x一定是1。

輸出輸出最少需要多少建築才能形成該**。

思路:用這個資料蓋最小數量的房子,假如每乙個高度變化就等於射出一根線,並且把比變化高度高的線去掉。

那麼,如果有一根等於它高度的線,那就代表這高度與以前重疊,ans不變;如果沒有,ans++,加入一根線。

實現也很簡單。

要了解一下set紅黑樹,在stl模板有講。

栗子:

#include

using

namespace std;

multiset<

int>st;

//定義int型的set;

multiset<

int>

::iterator it;

//定義set的送代器;

定義了乙個int型的st紅黑樹佇列。有如下操作:

st.clear();	//清零

st.insert(x); //加入x

*(--st.end()); //佇列最大值

st.erase(--st.end()); //清除佇列最大值

了解了這些就可一打**了:

#include

using

namespace std;

int n,w,ans,x,y,ma;

multiset<

int>st;

multiset<

int>

::iterator it;

intmain()

if(y>*(

--st.

end())

)}cout<

fclose

(stdin);

fclose

(stdout);

return0;

}

沒錯就這點**就能解決這題。

寫博不易,請發現問題的大佬提出。

**保證正確,請留讚再走。

2017 04 02 NOIP 普及組 模擬賽C組

總結 本次比賽310分 on3 呵呵呵呵 首先,一開始,開啟題目,發現b組可以迅速ac1題,但還是怕怕,慫回c組。8點30分,毫無頭緒地刷第2題。突然發現可以尋找中位數的方法去尋找士兵集合的那一列。9點30分,找出規律 士兵在同一列時如何站一列 10點,刷出t1和t2。t1是之前有過印象,於是純模擬...

2018 01 28 NOIP普及組 模擬賽D組

include include using namespace std int n,k,g,x long long ans,t 5000001 intmain 求最小生成樹 prim include include using namespace std into int u int x 2001 ...

2018 01 29 NOIP普及組 模擬賽D組

今天 比賽感覺好難啊!然後怎樣求加p後的個數呢?再加上增加的個數 對於n而言,增加的為在n後i的個數。對於i而言,增加的為在i後n的個數。o再來一遍列舉求 include include using namespace std unsigned long long ans int ansn,anso...