BZOJ 2957 樓房重建

2022-03-17 02:21:01 字數 913 閱讀 5794

動態地維護乙個以斜率為關鍵字的最長嚴格上公升子串行。

對於修改操作,只影響乙個塊,每次修改都暴力重構一下,計算出每個斜率並按塊內斜率排序,最後存入乙個vector中(其實並不需要排序,因為本身插入的時候就是按照「單調遞增——小了就跳過,大了就插入並更新斜率最大值」)單次修改時間複雜度 \(o(\sqrt)\)

inline void modify(int x,int y)
對於查詢操作,列舉每乙個塊,在塊內二分上乙個塊的斜率最大值(即當前塊內能看到的樓房的斜率最小值),累計上答案。單次查詢 \(o(\sqrt)\)

inline int query_(int x,double val)

inline int query())\()\)

#include#include#include#includeusing namespace std;

#define n 100007

#define sqn 1007

templateinline void read(t &x)

while(c>='0'&&c<='9')

x*=flag;

}vectorc[sqn];

int s,n,m,pos[n],num[n],st;

inline int min(int x,int y)

inline void modify(int x,int y)

inline int query_(int x,double val)

inline int query()

return ans+1;

}int main()}/*

5 74 6

3 21 19

5 11

2 17

1 11 1

*/

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了,只能說考試時候資料水了。這題有兩種做法,一種...