1163. 【普及组模拟赛】投影(skyline)

    xiaoxiao2026-09-16  1

    1163. 【普及组模拟赛】投影(skyline) 

    题目描述

       一天你对着眼前的景物拍了一张照,这个相机很特别,有建筑物的地方显示“X”,没有建筑物的地方显示为“.”,假设每个建筑都是块状的,照片长W(1<=W<=1,000,000),用N(1<=N<=50,000)对平面坐标(x,y)( 1 <= x <= W, 0<= y <= 500,000)描述照片中建筑物高度发生变化的位置,你的任务是计算出最少需要多少个建筑才能形成该照片。 如下图: 图片最少需要6个建筑,

    输入

    第一行: 两个空格隔开的整数N,W; 第2到N+1行:两个空格隔开的整数x和y,表示发生改变的点的坐标。输入中x是严格递增的而且第1个x一定是1。

    输出

    输出最少需要多少建筑才能形成该照片。

    样例输入

    10 26 1 1 2 2 5 1 6 3 8 1 11 0 15 2 17 3 20 2 22 1

    样例输出

    6

    思路就是找高度不同的点,只要比前面高度高就加一,小的话就看以前有没有这个高度,没有就加一,然后就可以有结果了

     

    const maxn=50000; var a,b:array[0..maxn] of longint; i,j,n,w,x,y,ans,p:longint; begin readln(n,w); fori:=1 to n do begin readln(x,y); while(p>0) and (a[p]>y) do dec(p); if((p=0) or (a[p]<y)) and (y>0) then begin inc(ans); inc(p); a[p]:=y; end; end; writeln(ans); end.

     

     

    转载请注明原文地址: https://ju.6miu.com/read-1312087.html
    最新回复(0)