投影(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...