線段樹 衛星覆蓋(NOI97) 矩陣切割

2022-02-04 08:17:12 字數 1132 閱讀 3049

sercoi(space-earth resource cover-observe lnstitute)是乙個致力於利用衛星技術對空間和地球資源進行覆蓋觀測的組織。現在他們研製成功一種新型資源觀測衛星-sercoi-308。這種衛星可以覆蓋空間直角座標系中一定大小的立方體空間,衛星處於該立方體的中心。

其中(x,y,z)為立方體的中心點座標,r為此中心點到立方體各個面的距離(即r為立方體高的一半).立方體的各條邊均平行於相應的座標軸。我們可以用乙個四元組(x,y,z,r)描述一顆衛星的狀態,它所能覆蓋的空間體積v=(2r)3=8r3。

由於一顆衛星所能覆蓋的空間體積是有限的,因此空間中可能有若干顆衛星協同工作。它們所覆蓋的空間區域可能有重疊的地方,如下圖所示(陰影部分表示重疊的區域)。

寫乙個程式,根據給定的衛星分布情況,計算它們所覆蓋的總體積。

輸入檔案的第一行是乙個正整數n(1<=n<=10o):表示空間中的衛星總數。

接下來的n行每行給出了一顆衛星的狀態,用空格隔開的四個正整數x,y,z,r依次表示了該衛星所能覆蓋的立方體空間的中心點座標和半高,其中-1000<=x,y,z<=1000, 1<=r<=200。

輸出檔案只有一行,包括乙個正整數,表示所有這些衛星所覆蓋的空間總體積。

30 0 0 3

1 -1 0 1

19 3 5 6

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

struct fdfdfdf[105][5];

long long ans;

bool judge(int x1,int x2,int y1,int y2,int z1,int z2,int k)

void dfs(int x1,int x2,int y1,int y2,int z1,int z2,int k)

if (x1f[k][1].x2)

if (y1f[k][2].x2)

if (z1f[k][3].x2) }

int main()

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

return 0;

}

線段樹區間覆蓋

線段樹能支援什麼操作呢 對區間進行操作,我們肯定要使用懶標記 那麼懶標記的下放順序就是乙個問題 我們目前需要處理3個懶標記分別記為 lazy,add,mul 優先順序應該是 lazy mul add 為什麼呢,首先是因為如果區間覆蓋,那麼前面更新的區間加,區間乘都會啞然失色,所以說區間覆蓋才是巨佬,...

NOI2014 購票 線段樹做法

先推出動態轉移方程方程,它有乙個距離限制,這一維可以用線段樹維護,然後線段樹中的凸包要求有回溯操作,這個每次只會修改top和那一為的值,記錄一下即可。bzoj上tle了。include include include include include define rep i,x,y for int ...

noi2017 整數 線段樹or模擬

orzyyb 題目大意 你需要維護乙個有 3 times 10 7 個二進位制位的數,有一種修改方式和一種詢問方式 對這個數加上 a times2 b 其中 a 10 9 b 3 times 10 7 保證需要維護的這個數始終非負 詢問這個數第k個二進位制位的值 總共有 10 6 次詢問 修改操作 ...