hdu 5091 給定矩形覆蓋盡量多點 掃描線+線段樹
給你10000以內的敵艦的坐標(即分別為x,y),要求用W*H的矩形去圍住一個區域,使得這個區域內的敵艦最多,矩形邊框上的敵艦也算在內。矩形可以平移,不能旋轉。
我們用矩形的中心點來描述這個矩形,然後對於每個敵艦,我們建立一個矩形中心的活動范圍,即矩形中心在該范圍內活動就可以覆蓋到該敵艦.那麼我們要求的問題就變成了:任意一個區域(肯定也是矩形的)最多能被矩形覆蓋的最大值.(即假如有價值為5和價值為3的矩形覆蓋了一個區域,那麼這片區域的價值為8).
在用線段樹離散化y軸坐標的時候發現線段樹上的每個葉節點表示的是一個半閉半開的區間[y1,y2),[y2,y3) 等.所以現在少了邊框上的敵艦的情況,這時只要把給定的w,h伸長0.5即可。
cnt:保存的是當前節點被覆蓋的值.
sum:表示該節點控制的區域內,被覆蓋的最大值.
所以向上更新方程為sum[i]=max(sum[i*2],sum[i*2+1]) + cnt[i];
#include
#include
#include
#include
#include
#include
#include