BZOJ 2957 樓房重建

2022-08-18 23:21:15 字數 693 閱讀 1084

線段樹維護當前區間的答案和當前區間的最大值

考慮如何合併

左區間的答案顯然可以被統計進去,記左區間的最大值為val

考慮右區間,右區間的左兒子的最大值<=val,則直接計算右區間的右兒子

否則右區間的右兒子的答案肯定能被計入最終答案,計算左兒子即可

遞迴統計

o(n log^2 n)

也可以分塊(wu nao)

#include#includeusing namespace std;

int n,m,sz[550005],x[100005],y[100005];

double max[550005];

int update(int t,int l,int r,double lim)

void insert(int t,int l,int r,int x,double k)

int mid=(l+r)>>1;

if (x<=mid) insert(t<<1,l,mid,x,k);

else insert(t<<1|1,mid+1,r,x,k);

max[t]=max(max[t<<1],max[t<<1|1]);

sz[t]=sz[t<<1]+update(t<<1|1,mid+1,r,max[t<<1]);

}int main()

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

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