BZOJ 2957 樓房重建

2022-05-01 03:42:07 字數 835 閱讀 1255

題目描述

/*

思路非常巧妙的一道題

不難看出線段樹維護的是區間內每個點與原點連線的斜率的最大值

考慮合併區間時怎麼合併答案

左區間一定會被看到,右區間能被看到的一定大於左區間的最大值

所以可以查詢右區間中大於左區間最大值的數的個數來向上合併

每次修改的複雜度為log^2n

*/#include

#include

using

namespace

std;

const

int n=1e5+7

;int

n,m;

int siz[n<<2

];double max[n<<2

];int

qread()

returnx;}

int calc(int l,int r,int rt,double

v)void modify(int l,int r,int rt,int p,double

v)

int mid=l+r>>1

;

if(p<=mid)modify(l,mid,rt<<1

,p,v);

else modify(mid+1,r,rt<<1|1

,p,v);

max[rt]=max(max[rt<<1],max[rt<<1|1

]); siz[rt]=siz[rt<<1]+calc(mid+1,r,rt<<1|1,max[rt<<1

]);}

intmain()

return0;

}

bzoj 2957 樓房重建

小a的樓房外有一大片施工工地,工地上有n棟待建的樓房。每天,這片工地上的房子拆了又建 建了又拆。他經常無聊地看著窗外發呆,數自己能夠看到多少棟房子。為了簡化問題,我們考慮這些事件發生在乙個二維平面上。小a在平面上 0,0 點的位置,第i棟樓房可以用一條連線 i,0 和 i,hi 的線段表示,其中hi...

BZOJ2957 樓房重建

description 小a的樓房外有一大片施工工地,工地上有n棟待建的樓房。每天,這片工地上的房子拆了又建 建了又拆。他經常無聊地看著窗外發呆,數自己能夠看到多少棟房子。為了簡化問題,我們考慮這些事件發生在乙個二維平面上。小a在平面上 0,0 點的位置,第i棟樓房可以用一條連線 i,0 和 i,h...

BZOJ2957 樓房重建

題意 給定m m 100000 個操作,每次將座標軸上橫座標為x 1 x n 100000 的樓的高度設為y,之後回答在 0,0 能看到幾個樓。分析 7.19考試題,當時全場基本都寫得o nm 大暴力,gzz神犇用騙分法竟然ac了,但在bzoj上tle了,只能說考試時候資料水了。這題有兩種做法,一種...