BZOJ2957 樓房重建

2021-07-15 10:36:42 字數 521 閱讀 5162

題意:給定m(m <= 100000)個操作,每次將座標軸上橫座標為x(1 <= x <= n <= 100000)的樓的高度設為y,之後回答在(0,0)能看到幾個樓。

分析:7.19考試題,當時全場基本都寫得o(nm)大暴力,gzz神犇用騙分法竟然ac了,但在bzoj上tle了,只能說考試時候資料水了。

這題有兩種做法,一種是分塊,還有一種是線段樹。

由於以前沒寫過分塊,所以就嘗試了嘗試寫分塊。

分塊的思路很簡單,每個塊內維護乙個「能看見的序列」,修改時重新維護一遍當前塊,查詢時,用當前能看到的最小斜率在塊內二分,更新答案,並更新能看到的最小斜率。

#include #include const int n = 100005, sz = 400;

int n,m,x,y,c[255];

double a[n],b[n];

int main()

printf("%d\n", ans);

} return 0;

}

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 樓房重建

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