BZOJ2957 樓房重建 分塊

2021-08-03 10:20:39 字數 817 閱讀 9601

貌似是一道線段樹的題,然而線段樹太燒腦想不出來,只能暴力的玩分塊。

分塊很好想的,維護 √n 個塊,每塊都按照斜率單調遞增的標準來維護。

查詢把所有塊for一遍。

因為每個塊的斜率都是單調遞增的,對於每個塊使用二分可以節省一點點時間,就可以偷稅(愉悅)的accepted了~

玩個斜率就不該用float= =

就為了在bzoj的status上讓me的結果好看一點,用起了float省空間,然後開始了漫漫的wa之旅= =

這裡是**~~~(附贈除錯資訊)

bzoj 4112ms 2416kb

其實可以先預處理出每個樓房在哪個塊,每個塊的開始點和結束點的位置,再小小的加乙個讀優,可能還會快一點。

#include

#include

#include

#include

using namespace std;

int n,m,topp[320],bsiz,btot;

double maxslo[320],nslo[100001],nblo[320][320];

void modify(int

pos)

}maxslo[bp]=maxs;

}void query()

seen+=topp[i]-l+1;last=max(maxslo[i],last);

//printf("i=%d seen[%d]=%d l=%d\n",i,i,seen,l);

}printf("%d\n",seen);

}int main()

}

bzoj 2957 樓房重建 分塊

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

分塊 bzoj2957 樓房重建

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

bzoj2957 樓房重建,分塊

分塊沒學過的可以看,分塊入門。題解 把房子分成 n塊每塊裡面維護乙個遞增的子串行,每次更新之後,在每乙個小塊內二分查詢第乙個大於前面最大的斜率,開始斜率為0,每次找完一塊更新一次,暴力加進答案。include include include include include include inclu...