BZOJ 2597 樓房重建 分塊 線段樹

2022-05-26 10:24:08 字數 521 閱讀 7775

乙個1e5的double陣列,前面大的元素會擋住後面小的元素,有1e5個操作,每次改變乙個元素的值,問你每次改完之後有多少元素沒有被擋

考慮分塊,對每乙個塊維護乙個單獨的答案,那麼總的答案一定是各塊單獨的答案的一部分合起來

每次修改之後只需要重新計算本塊的答案,並且對每一塊二分接上的位置,並統計答案

線段樹做法待更

分塊做法

開始精度設定的1e-6,wa了

int n,t,m;

double a[maxn];

double mx[maxn];

int cnt[maxn];

int go(int x)

vectorv[maxn];

int main()

}int ans = 0;

lst =0;

for(int j = 1; j <= tot; j++)

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

}return 0;

}

BZOJ2957 樓房重建 分塊

貌似是一道線段樹的題,然而線段樹太燒腦想不出來,只能暴力的玩分塊。分塊很好想的,維護 n 個塊,每塊都按照斜率單調遞增的標準來維護。查詢把所有塊for一遍。因為每個塊的斜率都是單調遞增的,對於每個塊使用二分可以節省一點點時間,就可以偷稅 愉悅 的accepted了 玩個斜率就不該用float 就為了...

bzoj 2957 樓房重建 分塊

time limit 10 sec memory limit 256 mb submit 2420 solved 1153 submit status discuss 小a的樓房外有一大片施工工地,工地上有n棟待建的樓房。每天,這片工地上的房子拆了又建 建了又拆。他經常無聊地看著窗外發呆,數自己能夠...

分塊 bzoj2957 樓房重建

orz 分塊大爺。思路很神奇也很清晰。把 塊內最值 和 塊內有序 兩種良好的性質結合起來,非常棒地解決了這個問題。圖中黑色的樓房即為每個塊內的 可視序列 顯而易見,在塊內它們的k 斜率 是單增的。由於上圖中第乙個塊的maxk比後面兩個塊的maxk都要大,所以後兩個塊對答案沒有貢獻,這也是顯然的。這就...