線段樹維護當前區間的答案和當前區間的最大值
考慮如何合併
左區間的答案顯然可以被統計進去,記左區間的最大值為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了,只能說考試時候資料水了。這題有兩種做法,一種...